android - SharedUserId 访问 SharedPreferences

标签 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?

我找到了一个解决方案,但它既不能很好地工作(如果应用程序 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/

相关文章:

Android 应用程序的蓝牙 BLE 扫描在广告停止时停止。为什么?

java - 为什么将设备语言更改为 RTL 语言时 fragment/Activity 布局看起来很糟糕?

java - Android 如何从 SharedPreference 设置 EditTextPreference 的默认值?

java - 使用 SharedPreferences 进行自定义 ArrayList - 适配器或编辑器错误?

java - 在 Activity 之间传递 ArrayList<String[]>

android - 保存拍摄的图像

java - Shared Preferences 多选 ListView

java - 我们可以在同一个类中拥有两个共享偏好的实例吗?

android - 应用更新后,如何查看之前安装的应用版本的versionCode?

Android 如何在调用 finish() 时保存和恢复 Activity 的状态?