gpt4 book ai didi

java - Android - 2 个应用程序之间的 SharedPreferences 无法有效运行

转载 作者:搜寻专家 更新时间:2023-11-01 09:25:58 24 4
gpt4 key购买 nike

我在 Android 中使用 SharedPreferences 在同一项目内的 2 个应用程序之间交换简单数据。我的目的是拥有一个“配置应用程序”(应用程序 A)来保存一些值,并通过 SharedPreferences 类使用的共享文件使应用程序 B 可以访问它们。应用 A 必须允许用户更新再次启动该应用的值,应用 B 应该会看到该更改。

通过在两个应用程序中声明以下内容,我的所有应用程序都以相同的方式工作:

android:sharedUserLabel="@string/user_id"
android:sharedUserId="sos.app"

这允许我的应用程序使用相同的数据。所以,首先我启动应用程序 A,然后我引入值并将数据提交到文件。然后我启动应用程序 B,通过 packageContent 访问 SharedPreferences 并正确获取我的值。

当我再次启动应用程序 A 和应用程序 B 以更新值时,我的问题出现了。所有更改都在应用程序 A 中正确进行(我看到了 sharedPreferences 中的更改)但是当我再次启动应用程序 B 时,它会访问以前的值而不是新值。

这很奇怪。看起来 Android 持有我的 sharedPreferences 实例引用,当应用程序 B 再次启动时,它不会再次通过 getSharedPreferences 方法访问共享文件。

这是应用程序 A 中的相关代码:

//Instance of SharedPreferences made in onCreate method
sharedPreferences = getSharedPreferences("my.configuration.file", Context.MODE_PRIVATE)
//Function to insert values in sharedPreferences
fun addConfigItemToSharedPreferences(itemToBeSaved: String){

with (sharedPreferences.edit()) {
putString(keyItemsList[configItemToBeAddedCounter], itemToBeSaved)
commit()
}
}

这是应用程序 B 中的相关代码(在 onCreate 方法内):

val packageContext = createPackageContext("com.televes.angrod.configurationapp", 0)
val sharedPreferences = packageContext.getSharedPreferences("my.configuration.file", Context.MODE_PRIVATE)
val mapOfPreferences: Map<String, *> = sharedPreferences.all

我的方法是否正确,还是应该使用其他机制在应用之间共享数据?

最佳答案

之前,您可以通过将 MODE_PRIVATE 更改为 MODE_WORLD_READABLE 或 MODE_WORLD_WRITABLE 来解决此问题,但现在已弃用。

来自官方文档(https://developer.android.com/training/data-storage/shared-preferences#GetSharedPreferences):

Caution: The MODE_WORLD_READABLE and MODE_WORLD_WRITEABLE modes have been deprecated since API level 17. Starting with Android 7.0 (API level 24), Android throws a SecurityException if you use them. If your app needs to share private files with other apps, it may use a FileProvider with the FLAG_GRANT_READ_URI_PERMISSION. For more information, also see Sharing Files.

所以,您现在必须使用 FileProvider。

您可以在此处了解有关 FileProvider 的更多信息:

https://developer.android.com/reference/android/support/v4/content/FileProvider

关于java - Android - 2 个应用程序之间的 SharedPreferences 无法有效运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50642110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com