我有两个应用程序,它们的包名是:
啊!
嗯,B
他们得到了shareduserid“com.blah.shared”。在我的设备中的/data/data,他们都有一个包含数据的文件夹,其中包含共享的prefs文件夹和默认的sharedpreferences文件,名为:
com.blah.a_preferences.xml网站
com.blah.b_preferences.xml网站
我知道两个shareduserid相同的应用程序可以访问彼此的文件。如何从应用程序B读取应用程序A的共享引用?
我找到了一个解决方案,但它既不能很好地工作(如果app a更新了一个首选项,app b仍然读取旧的值),也不能很好地工作(可以抛出异常)。

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

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

谢谢你的帮助!

最佳答案

一般来说,您不需要这样做,而且sharedUserId对于生产应用程序来说是个坏主意。无论如何,这是执行此操作的代码,但不需要指定IGNORE_SECURITY。如果您的应用程序具有相同的uid,它们应该能够读取彼此的(私有)文件。至于异常,只有当包不存在时才会抛出异常。你可以检查它是否存在,并且只在它存在的情况下执行代码(即,安装了另一个应用程序)。可能有一些缓存,所以每次需要时都应该加载pref。

关于android - SharedUserId访问SharedPreferences,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9815564/

10-09 23:36