Как читать SharedPreferences другого приложения (тот же идентификатор пользователя)?

Протестировано на Android 4.3. У меня есть два приложения: com.my.app.first и com.my.app.second . В своей деятельности я хочу читать настройки из другого приложения. Я решил использовать один и тот же идентификатор пользователя для моих приложений:

android:sharedUserId="com.my.app"

Я всегда загружаю свои настройки следующим образом:

 prefs = getSharedPreferences("MyAppPreferences", Context.MODE_PRIVATE); 

Теперь, в моем втором приложении, я делаю следующее:

 try { Context context = createPackageContext("com.my.app.first", Context.CONTEXT_IGNORE_SECURITY); // context.getPackageName() does indeed return "com.my.app.first" // Note: Context.MODE_WORLD_READABLE makes no difference here! prefs = context.getSharedPreferences("MyAppPreferences", Context.MODE_PRIVATE); } 

prefs.mFile ошибочно указывает на /data/data/com.my.app.second/shared_prefs/MyAppPreferences.xml .

Очевидно, что вызов getSharedPreferences возвращает предпочтения для текущего приложения, хотя я использовал контекст другого приложения . Что я делаю не так? Пожалуйста помоги!

Решено, просто прочитав старый контекст. Звучит как кэш для меня тоже.

 Context tempContext = context.createPackageContext(originalContext.getPackageName(),Context.CONTEXT_IGNORE_SECURITY); SharedPreferences sharedInformationM2 = tempContext.getSharedPreferences("sharedInformation", Context.MODE_WORLD_READABLE); 

Возможно, вы захотите сделать SharedPreference, созданный в App A MODE_WORLD_READABLE, и использовать общий sharedUserId для приложений A и App B. Как упоминалось в ссылке,

http://androiddhamu.blogspot.in/2012/03/share-data-across-application-in.html

Нашел проблему! Это похоже на ошибку в API getSharedPreferences . Оказалось, что предыдущий вызов getSharedPreferences вызывал другой вызов context.getSharedPreferences() для возврата предыдущего экземпляра – предпочтения текущего приложения.

Решение состояло в том, чтобы убедиться, что getSharedPreferences() НЕ getSharedPreferences() перед чтением предпочтений другого приложения.

Поскольку оба приложения запущены, вы также можете решить эту проблему, установив общие настройки:

 tempContext.getSharedPreferences("sharedInformation", Context.MODE_MULTI_PROCESS); 
Intereting Posts
Cant добавляет новый объект в RealmList из-за ссылки на нулевой объект Есть ли способ программно прокрутить представление прокрутки к определенному тексту редактирования? Android Button vs TextView – поведение, связанное с гиперссылкой Использование enableAutoManage () в фрагменте Использование адаптера настраиваемого списка с помощью AutoCompleteTextView и по-прежнему сохраняя функциональность автоматического завершения работы одинаково Использование тега <include> с помощью? Attr / myAttr Удалить выделение жирным шрифтом из текстового поля без изменения других атрибутов Автоматически добавлять тире в номер телефона в Android Как проверить, работает ли поток Android Как реализовать голосовый поиск в SearchView Не удается отменить диалог с помощью пользовательских кнопок Получать дистанцию ​​с помощью GPS Прокрутка поведения в вложенном RecyclerView с горизонтальной прокруткой Потерял секретный ключ для подписания андроида. Может ли приложение быть выпущено на Android Market? Отправьте запрос POST с данными JSON, используя Volley