У меня есть приложение для настройки, из которого мне нужно получить другие настройки приложений, но у меня нет сведений о ключах в них, как я могу получить все доступные ключи и значения в этом предпочтении?
Спасибо, Swathi
У меня есть приложение для настройки, из которого мне нужно получить другие настройки приложений, но у меня нет сведений о ключах в них, как я могу получить все доступные ключи и значения в этом предпочтении?
Спасибо, Swathi
Предполагая, что предпочтение - WORLD_READABLE, это может сработать:
final ArrayList<HashMap<String,String>> LIST = new ArrayList<HashMap<String,String>>();
// where com.example is the owning app containing the preferences
Context myContext = createPackageContext("com.example", Context.MODE_WORLD_WRITEABLE);
SharedPreferences testPrefs = myContext.getSharedPreferences("test_prefs", Context.MODE_WORLD_READABLE);
Map<String, ?> items = testPrefs .getAll();
for(String s : items.keySet()) {
// do something 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 в игровых приложениях, где я просто хочу иметь возможность передавать символы из одного приложения в другое. Слишком плохо они обесценивали оба режима совместного доступа.
Он может работать, если мы хотим прочитать значение переносимости из другого приложения /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();
}