我已经为此苦苦挣扎了一段时间。基本上,我想让两个应用程序(总是安装在一起)共享首选项,其中一个只是在后台运行并需要使用首选项的服务(应该拥有首选项,但只really需要读取它们),另一个应用程序是前端 UI 应用程序,需要能够写入另一个应用程序拥有的首选项文件。该服务将在后台执行操作(这可能由首选项决定),并且 UI 将允许用户编辑首选项并查看服务中的一些信息。但是,它们将是不同的包/应用程序。
我尝试以下本教程这让我很好地了解了如何在一个应用程序中设置可供另一个应用程序读取的首选项。本质上,我通过创建一个新的上下文myContext = createPackageContext("com.example.package",Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
然后打电话myContext.getSharedPreferences("pref_name", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
但是,我无法从外部应用程序成功写入首选项 - (SharedPreferences.Editor).commit() 返回 false,并且我在 logcat 中收到有关无法编辑 pref_name.xml.bak 的警告。
如何成功设置我的应用程序,以便它们都可以读取和写入相同的首选项文件(该文件存储在其中一个的数据文件夹中)?
最好将文件设置为私有模式。应用程序需要使用同一组证书进行签名才能共享此文件。
将两个应用程序中的sharedUserId 设置为相同。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hello"
android:versionCode="1"
android:versionName="1.0"
android:sharedUserId="com.example">
....
从其他包获取上下文:
mContext = context.createPackageContext(
"com.example.otherapp",
Context.MODE_PRIVATE);
mPrefs = mContext.getSharedPreferences("sameFileNameHere", Activity.MODE_PRIVATE);
照常从 SharedPreference 获取项目。您现在就可以访问它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)