我有两个应用程序,包含这些包名称:
他们获得了sharedUserId“com.blah.shared”。在我的设备中的/ data / data,他们都有一个包含数据的文件夹,其中包含shared_prefs文件夹和名为的默认SharedPreferences文件:
我知道具有相同sharedUserId的两个应用可以访问彼此的文件。 如何从应用b中读取应用a的SharedPreferences?
我找到了一个解决方案,但它既不能正常工作(如果应用程序更新了首选项,应用程序b仍然读取旧值),也没有好的代码(可以抛出异常)。
try {
Context c = context.createPackageContext("com.blah.a",
Context.CONTEXT_IGNORE_SECURITY))
aPrefs = PreferenceManager.getDefaultSharedPreferences(c);
} catch (NameNotFoundException e) {
}
感谢您的帮助!
答案 0 :(得分:1)
通常,您不需要这样做,而sharedUserId
对于生产应用来说不是一个好主意。无论如何,这是执行此操作的代码,但您无需指定IGNORE_SECURITY
。如果您的应用具有相同的UID,则应该能够读取彼此的(私有)文件。对于异常,只有在包不存在时才会抛出异常。您可以检查它是否存在,并且仅在代码存在时执行代码(即,安装了其他应用程序)。可能有一些缓存,因此您应该在每次需要时加载prefs。