Я использую SharedPreferences в Android для обмена простыми данными между 2 приложениями в одном проекте.Моя цель - иметь «приложение конфигурации» (приложение A), чтобы сохранить некоторые значения и сделать их доступными для приложения B через общий файл, который используется классом SharedPreferences.Приложение A должно позволять пользователю обновлять значения при повторном запуске приложения, и приложение B должно видеть эти изменения.
Все мои приложения работают как одно и то же, объявив в обоих приложениях следующее:
android:sharedUserLabel="@string/user_id"
android:sharedUserId="sos.app"
Это позволяет моим приложениям использовать одни и те же данные.Итак, сначала я запускаю приложение A, затем я ввожу значения и фиксирую данные в файле.Затем я запускаю приложение B, получаю доступ к SharedPreferences через packageContent и правильно получаю свои значения.
Моя проблема возникает, когда я снова запускаю приложение 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
Правильн ли мой подход или я буду использовать другой механизм для обмена данными между приложениями?