Android: recuperación de preferencias compartidas de otra aplicación

Tengo una aplicación de configuración de la que tengo que recuperar otras preferencias de las aplicaciones, pero no tengo los detalles de las claves en ellos, ¿cómo puedo recuperar todas las claves disponibles y los valores en esa preferencia?

Gracias, Swathi

Suponiendo que la preferencia sea WORLD_READABLE, esto podría funcionar:

final ArrayList> LIST = new ArrayList>(); 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 items = testPrefs .getAll(); for(String s : items.keySet()){ //do somthing like String value= items.get(s).toString()); } 

¡Bueno! usando este código en la Aplicación 1 (con el nombre del paquete es “com.sharedpref1”) para almacenar datos con Preferencias Compartidas.

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

Y usar este código en la Aplicación 2 para obtener datos de las Preferencias Compartidas en la Aplicación 1. Podemos obtenerlo porque usamos MODE_WORLD_READABLE en la aplicación 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()); } 

Más información, visite esta URL: http://androiddhamu.blogspot.in/2012/03/share-data-across-application-in.html

Además, debe agregar el mismo android: sharedUserId en el archivo de manifiesto de ambas aplicaciones.

Desafortunadamente, los documentos ahora ni siquiera explican MODE_WORLD_READABLE y MODE_WORLD_WRITEABLE, sino que dicen:

Esta constante se depreció en el nivel de API 17. La creación de archivos legibles a nivel mundial es muy peligrosa y es probable que cause agujeros de seguridad en las aplicaciones. Es fuertemente desaconsejado; en cambio, … etc.

Desde la depreciación, implementar el uso compartido de archivos entre aplicaciones con preferencias compartidas puede ser demasiado arriesgado, aunque fue simple. No me preocupan demasiado los agujeros de seguridad del modo MODE_WORLD_READABLE en las aplicaciones de juegos en las que solo quiero transferir caracteres de una aplicación a otra. Es una lástima que depreciaron ambos modos de compartir.

Puede funcionar si queremos leer el valor de la periferia de otra aplicación / paquete / proceso. pero hay algo mal en la respuesta de jkhouw1:

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

Debería ser :

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

sin embargo, CONTEXT_IGNORE_SECURITY y MODE_WORLD_WRITEABLE con el mismo valor de “int 2” En absoluto, gracias por esta pregunta y respuestas.

Es simple recuperar datos de preferencias compartidas de la tienda de una aplicación a otra.

Paso 1: agregue el mismo android:sharedUserId="android.uid.shared" en los archivos de manifiesto de ambas aplicaciones.

Paso 2: Aplicación Value Value1

  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(); 

Paso 3: Obtener valor de la aplicación2

 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(); }