Android: невозможно получить доступ к SharedPreference другого приложения - PullRequest
4 голосов
/ 22 марта 2012

Я искал несколько дней, чтобы решить эту проблему, но безуспешно.

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

мой код:

Context c = createPackageContext("my.app.pkg", Context.CONTEXT_IGNORE_SECURITY);            
SharedPreferences sp = c.getSharedPreferences("my.app.pkg", Context.CONTEXT_IGNORE_SECURITY);

Выполнение приведенного выше кода дает мне следующее:

Попытка чтенияфайл настроек /data/data/my.app.pkg/shared_prefs/my.app.pkg_preferences.xml без разрешения

даже если объект sp не является нулевым, но он ничего не получает из моегостарое приложение.

Я попытался поискать в гугле, и кажется, что большинство людей могут запустить приведенный выше код без ошибок.Я что-то пропустил?

Ответы [ 3 ]

3 голосов
/ 22 марта 2012

Мы сделали именно это для нашей книги по Android Android на практике . Ключ должен использовать один и тот же процесс и идентификатор пользователя для обоих приложений. Пример кода и примеры приложений находятся на Google Code (SharedProcessApp1 и SharedProcessApp2). Вы можете пойти оттуда.

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

Вы действительно можете поделиться предпочтениями между приложениями.Вот почему он называется SharedPreferences.

Вам нужно убедиться, что оба приложения подписаны одним и тем же сертификатом и имеют одинаковый SharedUserId в файле AndroidManifest.xml: читать здесь .

Это потому, что SharedPreferences, которые вы получаете от

PreferenceManager.getDefaultSharedPreferences(context)

, всегда имеет MODE_PRIVATE.

Однако в приложении вы также можете получить объект SharedPreferences в контексте с помощьюследующее:

SharedPreferences prefs = getSharedPreferences("my_public_shared_prefs", MODE_WORLD_READABLE);

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

Context context = createPackageContext("my_target_app_package", Context.CONTEXT_IGNORE_SECURITY);            
SharedPreferences prefs = context.getSharedPreferences("my_public_shared_prefs", MODE_WORLD_READABLE);

Убедитесь, что вы не храните там личную информацию, потому что она читается МИР, что означаетвы и все остальные можете прочитать эти данные.

Для завершения, если вы хотите получить SharedPreferences вашего старого приложения, вам необходимо обновить старое приложение с SharedUserId в файле Manifest.

0 голосов
/ 22 марта 2012

Приложения Android работают в собственной песочнице, поэтому одно приложение не может получить доступ к данным другого действия.Но если приложение хочет поделиться некоторыми своими данными, это может быть достигнуто ContentProvider.

См. Поставщик контента: http://developer.android.com/guide/topics/providers/content-providers.html

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