SharedPreferences между двумя приложениями, не обновленными, если первое приложение не будет открыто и повторно открыто
У меня есть два приложения, которые делятся предпочтениями, проблема, с которой я сталкиваюсь, - это то, что одно приложение пишет некоторые настройки, а другое приложение читает их, это старое значение, которое извлекается, если приложение чтения не выйдет, а затем снова открыто, то есть:
Если приложение A запущено и читает значение из настроек:
...
prefs = m_context.getSharedPreferences (name, Context.MODE_PRIVATE);
m_retryCount = prefs.getInt(RETRY_COUNT, 0);
Допустим, что полученное значение равно 10.
Теперь, если приложение B запускает и записывает предпочтения:
prefs = cityidCtx.getSharedPreferences (prefsName, Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences.Editor editor = prefs.edit ();
editor.putInt(CityIdHandsetState.RETRY_COUNT, this.m_retryCount);
editor.commit ();
Допустим, что написанное значение равно 20.
Теперь, если приложение A снова читает настройки после того, как новое значение 20 было написано приложением B, тогда значение, которое получает приложение A, равно 10. Но если приложение A завершено, а затем снова открывается, то значение, которое он читает сейчас, будет 20.
Как это можно зафиксировать так, что приложение A всегда получает обновленные значения.
Вы используете неправильный FLAG, этот флаг не используется там
Флаг для использования с createPackageContext (String, int): игнорировать любые ограничения безопасности для запрашиваемого Контекста, позволяя ему всегда загружаться. Для использования с CONTEXT_INCLUDE_CODE, чтобы разрешить загрузку кода в процесс, даже если это небезопасно. Используйте с особой осторожностью!
Вы используете Context.getSharedPreferences(String name, int mode), который указывает
Рабочий режим. Используйте 0 или MODE_PRIVATE для операции по умолчанию, MODE_WORLD_READABLE и MODE_WORLD_WRITEABLE для управления разрешениями.
Вам просто повезло, что они имеют похожие значения. Вам нужно использовать...
Однако... То, что вы хотите, это на самом деле Context.MODE_MULTI_PROCESS Но... он был устаревшим в 23 и не разрешает одновременный доступ к данным.
Эта константа была устаревшей в API-уровне 23. MODE_MULTI_PROCESS не работает надежно в некоторых версиях Android и, кроме того, не предоставляет какого-либо механизма для согласования одновременных изменений между процессами. Приложения не должны пытаться использовать его. Вместо этого они должны использовать явный кросс-процесс управления данными, например ContentProvider.
Поэтому вам необходимо использовать ContentProvider.
Еще в рубрике
- Вопросы
- Sharedpreferences
- SharedPreferences между двумя приложениями, не обновленными, если первое приложение не будет открыто и повторно открыто