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