SharedUserId访问SharedPreferences

时间:2012-03-22 02:17:38

标签: android sharedpreferences

我有两个应用程序,包含这些包名称:

  • 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?

我找到了一个解决方案,但它既不能正常工作(如果应用程序更新了首选项,应用程序b仍然读取旧值),也没有好的代码(可以抛出异常)。

try {
    Context c = context.createPackageContext("com.blah.a", 
        Context.CONTEXT_IGNORE_SECURITY))

    aPrefs = PreferenceManager.getDefaultSharedPreferences(c);
} catch (NameNotFoundException e) {
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

通常,您不需要这样做,而sharedUserId对于生产应用来说不是一个好主意。无论如何,这是执行此操作的代码,但您无需指定IGNORE_SECURITY。如果您的应用具有相同的UID,则应该能够读取彼此的(私有)文件。对于异常,只有在包不存在时才会抛出异常。您可以检查它是否存在,并且仅在代码存在时执行代码(即,安装了其他应用程序)。可能有一些缓存,因此您应该在每次需要时加载prefs。