Я боролся с этим некоторое время. В принципе, я хочу иметь два варианта совместного использования (которые всегда будут установлены вместе), причем один из них является просто службой, которая работает в фоновом режиме и должна использовать настройки (должна принадлежать предпочтениям, но их действительно нужно читать), а другое приложение является интерфейсом пользовательского интерфейса, которое должно быть в состоянии записать в файл настроек, принадлежащий другому приложению. Служба будет делать что-то в фоновом режиме (что может определяться предпочтениями), и пользовательский интерфейс позволит пользователю отредактировать настройки и просмотреть некоторую информацию из службы. Однако они будут разными пакетами/приложениями.
Я попытался выполнить этот учебник, который дал мне довольно хорошее представление о том, как иметь предпочтения в одном приложении, которое может быть прочитано другим. По существу, я создаю новый контекст через myContext = createPackageContext("com.example.package",Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
, а затем вызываю myContext.getSharedPreferences("pref_name", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
. Однако я не могу правильно записать предпочтения из внешнего приложения - (SharedPreferences.Editor).commit() возвращает false, и я получаю предупреждение в logcat о невозможности редактировать pref_name.xml.bak.
Как я могу успешно настроить мои приложения, чтобы оба они могли читать и записывать в тот же файл настроек (который хранится в папке с данными одного из них)?