SharedUserId доступ к SharedPreferences - PullRequest
3 голосов
/ 22 марта 2012

У меня есть два приложения с именами пакетов:

  • com.blah.a
  • com.blah.b

Они получили sharedUserId "com.blah.shared". В / data / data на моем устройстве они оба получили папку с этими данными, которая содержит папку shared_prefs и файлы SharedPreferences по умолчанию с именем:

  • com.blah.a_preferences.xml
  • com.blah.b_preferences.xml

Я знаю, что два приложения с одним и тем же sharedUserId могут получать доступ к файлам друг друга. Как я могу прочитать SharedPreferences приложения a из приложения b?

Я нашел одно решение, но оно не работает ни хорошо (если приложение a обновляет предпочтение, приложение b все еще читает старое значение), ни хороший код (может вызвать исключение).

try {
    Context c = context.createPackageContext("com.blah.a", 
        Context.CONTEXT_IGNORE_SECURITY))

    aPrefs = PreferenceManager.getDefaultSharedPreferences(c);
} catch (NameNotFoundException e) {
}

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 22 марта 2012

Как правило, вам не нужно этого делать, и sharedUserId - плохая идея для производственных приложений.В любом случае, это код для этого, но вам не нужно указывать IGNORE_SECURITY.Если ваши приложения имеют одинаковый UID, они должны иметь возможность читать (личные) файлы друг друга.Что касается исключения, то исключение будет выдано, только если пакет не существует.Вы можете проверить, если это так, и выполнить код, только если он существует (т. Е. Установлено другое приложение).Возможно, существует некоторое кеширование, поэтому вы должны загружать префы каждый раз, когда они вам нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...