Android中跨包访问Preferences

本文介绍如何在一个Android应用程序中创建并编辑Preferences,并允许另一个应用程序以可读方式访问这些Preferences。示例展示了如何使用Context.MODE_WORLD_READABLE权限级别来实现跨应用的数据共享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们可以在一个应用程序中创建并编辑一个 Preferences ,然后在另外一个应用程序中读取它。当然有个前提是 该<wbr>Preferences</wbr> 的权限至少是 Context.MODE_WORLD_READABLE
比如在包名为 com.teleca 应用程序A中有一个名叫 com.teleca_prefer 的Preferences:
final static String preferName=" com.teleca_prefer ";
final static String KEY_TIP="tip";
.......................................................
prefsWorldRead = getSharedPreferences(preferName,
Context.MODE_WORLD_READABLE) ;
Editor prefsWorldReadEditor = prefsWorldRead.edit();
prefsWorldReadEditor.putString(KEY_TIP, "Are you fine?");
prefsWorldReadEditor.commit();
我们可以在包名为com.teleca.robin应用程序B中这样读取它:
private SharedPreferences prefsWorldRead;
final static String preferName=" com.teleca_prefer ";
final static String KEY_TIP="tip";
....................................................................
if(prefsWorldRead ==null)
{
Context otherContext=null;
try {
otherContext =createPackageContext(" com.teleca ", Context.CONTEXT_IGNORE_SECURITY );
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
prefsWorldRead = otherContext.getSharedPreferences(preferName,
Context.MODE_WORLD_READABLE);
}
String tip=prefsWorldRead.getString(KEY_TIP, "null2");
createPackageContext 为Context的方法, " com.teleca " 为A应用程序的包名, " com.teleca_prefer " 为你要读取的A应用程序的 Preferences 名字。
public abstractContextcreatePackageContext(StringpackageName, int flags)
Since: API Level 1

Return a new Context object for the given application name. This Context is the same as what the named application gets when it is launched, containing the same resources and class loader. Each call to this method returns a new instance of a Context object; Context objects are not shared, however they share common state (Resources, ClassLoader, etc) so the Context instance itself is fairly lightweight.

ThrowsPackageManager.NameNotFoundExceptionif there is no application with the given package name.

ThrowsSecurityExceptionif the Context requested can not be loaded into the caller's process for security reasons (seeCONTEXT_INCLUDE_CODEfor more information}.

Parameters
packageName Name of the application's package.
flags Option flags, one ofCONTEXT_INCLUDE_CODEorCONTEXT_IGNORE_SECURITY.
Returns
  • A Context for the application.
Throws

java.lang.SecurityException
if there is no application with the given package name
PackageManager.NameNotFoundException
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值