web-dev-qa-db-fra.com

Android: Récupération des préférences partagées d'une autre application

J'ai une application de paramètres à partir de laquelle je dois récupérer d'autres préférences d'applications, mais je n'ai pas les détails des clés, comment puis-je récupérer toutes les clés et valeurs disponibles dans cette préférence?

Merci, Swathi

30
Swathi EP

En supposant que la préférence est WORLD_READABLE, cela pourrait fonctionner:

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

D'accord! en utilisant ce code dans l'application 1 (avec le nom du package est "com.sharedpref1") pour stocker des données avec des préférences partagées.

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

Et en utilisant ce code dans l'application 2 pour obtenir des données à partir des préférences partagées dans l'application 1. Nous pouvons les obtenir parce que nous utilisons MODE_WORLD_READABLE dans l'application 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());
            }

Plus d'informations s'il vous plaît visitez cette URL: http://androiddhamu.blogspot.in/2012/03/share-data-across-application-in.html

49
danhnn.uit

De plus, vous devez ajouter le même Android: sharedUserId dans le fichier manifeste des deux applications.

10
Khobaib

Malheureusement, les documents n'expliquent même plus MODE_WORLD_READABLE et MODE_WORLD_WRITEABLE, mais disent plutôt:

Cette constante a été dépréciée au niveau 17 de l'API. La création de fichiers lisibles par le monde est très dangereuse et risque de provoquer des failles de sécurité dans les applications. Il est fortement déconseillé; à la place, .... etc

Depuis la dépréciation, la mise en œuvre du partage de fichiers entre des applications avec des préférences partagées peut être trop risquée, même si c'était simple. Je ne suis pas trop préoccupé par les failles de sécurité du mode MODE_WORLD_READABLE dans les applications de jeu où je veux juste pouvoir transférer des personnages d'une application à une autre. C'est dommage qu'ils aient déprécié les deux modes de partage.

9
Androidcoder

Cela peut fonctionner si nous voulons lire la valeur de la préférence à partir d'une autre application/paquet/processus. mais il y a quelque chose qui ne va pas dans la réponse de jkhouw1:

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

Ça devrait être :

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

cependant, CONTEXT_IGNORE_SECURITY et MODE_WORLD_WRITEABLE avec la même valeur de "int 2" Merci à tous pour cette question et ses réponses.

5
sakura_liu