Невозможно получить доступ к «читабельным» настройкам в Honeycomb - PullRequest
4 голосов
/ 31 мая 2011

У меня бесплатная игра, и я делаю платную версию. Бесплатная игра хранит целочисленный рекорд в общем файле настроек, который я создал в режиме MODE_WORLD_READABLE. Платная версия должна скопировать этот счет, если установлена ​​бесплатная версия.

Код, который я использую для этого, выглядит следующим образом:

Context c = paidContext.createPackageContext("my.app.packagename", Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences prefs = c.getSharedPreferences(SHARED_PREF_FILENAME, Context.MODE_WORLD_READABLE);

Первая строка создает контекст для бесплатного приложения, если оно существует (в противном случае вы получаете исключение). Вторая строка получает файл общих настроек. Затем я могу использовать prefs.getInt, чтобы получить высокий балл.

Проблема: это прекрасно работает в Android 1.5, 2.1, 2.3 и т. Д., Но не работает для меня в эмуляторе Android 3.0 или 3.1. Приведенный выше код выполняется, но getInt всегда возвращает значение по умолчанию.

Это ошибка? Особенность Сота? Есть ли какие-то разрешения для приложений, о которых я не знаю? Как я могу диагностировать это дальше?

1 Ответ

1 голос
/ 29 сентября 2011

Хотя и полезно, комментарий Романа по этому вопросу не дает ответа.Более того, Android не гарантирует, что предпочтения будут доступны всем процессам;Фактически, в документации (вверху SharedPreferences ) прямо говорится, что межпроцессный доступ не поддерживается (хотя иногда это работает).Подписывая приложения с разными сертификатами, вы гарантируете, что приложения не могут работать в одном и том же процессе, который является методом песочницы Android.

Для чего я стоил, я изначально пытался использовать SharedPreferences с MODE_WORLD_READABLE каксредство для обеспечения доступности данных между двумя приложениями с разной подписью.В конечном итоге я столкнулся с проблемами из-за некоторых случаев, когда межпроцессное чтение не сработало (казалось, что это порядок действий).Вместо этого я реализовал то, что я должен был сделать в первую очередь, это межпроцессное взаимодействие (IPC) с использованием реализации Service + AIDL .

...