Intereting Posts
Настройка Firebase на Android Android Firebase Query Общие указатели: есть ли какие-либо отличия между шаблоном «sp <>» для Android и шаблоном «shared_ptr <>» от BOOST? Ошибка «Отсутствие цели» на эмуляторе планшета Android в Eclipse Получение контекста в AndroidTestCase или InstrumentationTestCase в функции тестирования устройства Android Studio Размытые изображения SVG в хром для Android android.content.res.Resources $ NotFoundException Невозможно заставить Robotium работать в Android Studio Не удается получить доступ к «findViewById» в AsyncTask Android Iframe SameOrigin на пользовательских сайтах Android: загрузите файл с сервера и покажите ход загрузки на панели уведомлений с помощью AsyncTask Панель инструментов Appompat не предоставляет стили для поворота Как масштабировать View / ViewGroup – правильно настроить макет? Синхронизированный метод Java Не удалось открыть устройство HAX! HAX не работает, и эмулятор запускается в эмуляторе режима эмуляции

Как читать 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);