Android Shared Preferences для разных приложений

Я разрабатываю приложение для Android, которое взаимодействует с другими приложениями, установленными на устройстве, через файл sharedpreference.

Этот файл был создан как MODE.WORLD_READABLE, и каждое установленное приложение имеет свой собственный файл с общим определенным именем и свойством (какие изменения являются значением для этого конкретного свойства).

Например, AppA и AppB должны иметь для каждого из них общий файл с именем «app_shared_file.xml» с свойством «property_shared_file».

Из моего приложения я хочу сначала получить доступ к этому файлу и прочитать это значение свойства, и в зависимости от этого результата я хочу создать / обновить мой.

Тем не менее, у меня есть некоторые проблемы в достижении этого. В документации на Android я вижу следующее:

Извлеките и сохраните содержимое файла настроек «имя», возвращая SharedPreferences, через который вы можете извлекать и изменять его значения. Только один экземпляр объекта SharedPreferences возвращается всем вызывающим абонентам с тем же именем , то есть они будут видеть изменения друг друга, как только они будут сделаны.

После прочтения другого файла общих предпочтений приложения, когда я пытаюсь создать / обновить мою систему, вместо редактирования моей используется тот, который я прочитал ранее. Если, наоборот, я начинаю с обновления моего и читаю другое приложение позже – вместо того, чтобы читать другое, доступ к которому принадлежит мне.

Есть предположения?

Код, который я использую для чтения общего префикса, [где packageName – другое приложение pckg]:

Context con = context.createPackageContext(packageName, Context.CONTEXT_IGNORE_SECURITY); SharedPreferences pref = con.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_WORLD_READABLE); pref.getBoolean(SHARED_PREF_PROP, false); 

Код, который я использую для записи в приложении pref, является:

 SharedPreferences prefs= getSharedPreferences(SHARED_PREF_NAME, context.MODE_WORLD_READABLE); SharedPreferences.Editor editor = prefs.edit(); editor.putBoolean(SHARED_PREF_PROP, value); editor.commit(); 

Заранее спасибо.

Solutions Collecting From Web of "Android Shared Preferences для разных приложений"

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

Другой вариант, поскольку вы знаете имя пакета других приложений (я предполагаю), заключается в том, чтобы выбрать основное приложение, которое создаст его и обработает. Затем читайте непосредственно из самого файла, используя прямой URI. Поскольку вы устанавливаете разрешения для MODE_WORLD_READABLE , система должна позволить вам сделать это. Хотя, это может заблокировать вас от доступа к самой папке. Я лично никогда не пробовал.

Я считаю, что нашел ответ, который вы ищете.

Вы можете прочитать настройки из другого приложения с помощью этого фрагмента.

 String PACKAGE_NAME = "com.gr.iasi"; String PREFERENCE_NAME = "GlobalPrefsJorge"; try { myContext = createPackageContext(PACKAGE_NAME,Context.MODE_WORLD_WRITEABLE); SharedPreferences testPrefs = myContext.getSharedPreferences(PREFERENCE_NAME, Context.MODE_WORLD_READABLE); Map<String, ?> items = testPrefs .getAll(); for(String s : items.keySet()){ //Print keys and values; Log.i("***" +s.toString(), items.get(s).toString()); } } catch (NameNotFoundException e) { e.printStackTrace(); }