Android: получение общих настроек другого приложения

У меня есть приложение настроек, из которого мне нужно получить другие настройки приложений, но у меня нет данных о ключах в них, как я могу получить все доступные ключи и значения в этом предпочтении?

Спасибо, Swathi

Solutions Collecting From Web of "Android: получение общих настроек другого приложения"

Предполагая, что предпочтение WORLD_READABLE, это может сработать:

final ArrayList<HashMap<String,String>> LIST = new ArrayList<HashMap<String,String>>(); Context myContext = createPackageContext("com.example", Context.MODE_WORLD_WRITEABLE); // where com.example is the owning app containing the preferences SharedPreferences testPrefs = myContext.getSharedPreferences ("test_prefs", Context.MODE_WORLD_READABLE); Map<String, ?> items = testPrefs .getAll(); for(String s : items.keySet()){ //do somthing like String value= items.get(s).toString()); } 

Хорошо! Используя этот код в приложении 1 (с именем пакета «com.sharedpref1») для хранения данных с помощью общих настроек.

 SharedPreferences prefs = getSharedPreferences("demopref", Context.MODE_WORLD_READABLE); SharedPreferences.Editor editor = prefs.edit(); editor.putString("demostring", strShareValue); editor.commit(); 

И используя этот код в Приложении 2 для получения данных из общих настроек в приложении 1. Мы можем получить его, потому что мы используем MODE_WORLD_READABLE в приложении 1:

  try { con = createPackageContext("com.sharedpref1", 0); SharedPreferences pref = con.getSharedPreferences( "demopref", Context.MODE_PRIVATE); String data = pref.getString("demostring", "No Value"); displaySharedValue.setText(data); } catch (NameNotFoundException e) { Log.e("Not data shared", e.toString()); } 

Более подробную информацию можно найти по адресу: http://androiddhamu.blogspot.in/2012/03/share-data-across-application-in.html

Кроме того, вы должны добавить тот же android: sharedUserId в файл манифеста обоих приложений.

К сожалению, документы теперь даже не объясняют MODE_WORLD_READABLE и MODE_WORLD_WRITEABLE, вместо этого говорят:

Эта константа была обесценена на уровне API 17. Создание файлов, читаемых во всем мире, очень опасно и может привести к появлению ошибок в приложениях. Он сильно обескуражен; Вместо этого ….

Поскольку амортизация, реализация совместного использования файлов между приложениями с sharedpreferences может быть слишком рискованной, хотя это было просто. Я не слишком забочусь о дырах в безопасности из режима MODE_WORLD_READABLE в игровых приложениях, где я просто хочу иметь возможность передавать символы из одного приложения в другое. Слишком плохо, что они обесценили оба режима обмена.

Он может работать, если мы хотим прочитать значение perference из другого приложения / pkg / process. Но в ответе jkhouw1 есть что-то не так:

 Context myContext = createPackageContext("com.example", Context.MODE_WORLD_WRITEABLE); 

Должен быть :

 Context myContext = createPackageContext("com.example", Context.CONTEXT_IGNORE_SECURITY); 

Хотя, CONTEXT_IGNORE_SECURITY и MODE_WORLD_WRITEABLE с одинаковым значением «int 2». В целом, спасибо за этот вопрос и ответы.

Простое получение данных общих настроек хранилища одного приложения в другое приложение.

Шаг 1: добавьте тот же android:sharedUserId="android.uid.shared" в файлы манифеста приложения.

Шаг 2: Сохранить значение application1

  SharedPreferences preferences = context.getSharedPreferences("token_id", Context.MODE_WORLD_READABLE); Editor editor = preferences.edit(); editor.putString("shared_token", encryptedValue); Log.e("aaa *** shared_token : ", encryptedValue.toString()); editor.commit(); 

Шаг 3: получить значение из приложения2

 Context con = null; try { con = createPackageContext("application2 package name", Context.CONTEXT_IGNORE_SECURITY); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } try { if (con != null) { SharedPreferences pref = con.getSharedPreferences( "token_id", Context.MODE_WORLD_READABLE); String data = pref.getString("shared_token", ""); Log.d("msg", "Other App Data: " + data); } else { Log.d("msg", "Other App Data: Context null"); } } catch (Exception e) { e.printStackTrace(); }