Je fais un programme de sauvegarde, qui a sauvegardé le téléphone Par exemple, 2 programme ont enregistré leurs préférences partagées avec des noms est-ce vraiment possible? P> EDIT1: Je ne sais pas quels programmes / activités au téléphone. Je veux obtenir toutes les touches Par exemple: votre téléphone dispose de 10 programmes, chacun crée une SharedPreferences nommée EDIT2: Selon SharedPreferences code> dans un fichier de ma propre structure. Mais je ne sais pas comment les énumérer tous, que j'ai besoin:
"Programme A" code> et
"Programme B" code>. J'ai besoin d'obtenir une matrice de chaîne Thay contenir ces 2 noms. Ensuite, j'utilise
getSharedpreferences code> avec "Programme A", j'ai besoin d'obtenir toutes les clés que le programme a sauvegardé. P>
code> que chaque programme enregistré. Cela vous permet de sauvegarder toutes vos données de téléphone, mais seules les valeurs SharedPreferences. P>
Programme 1 code> à
Programme 10 code> (mais bien sûr, quel que soit le nom qu'ils veulent) . Et j'aimerais obtenir tous ces
programme 1 code> à
Programme 10 code> String. Ensuite, si
programme 1 code> a 5 touches appelées
Key 1 code> à
Key 5 code>, je veux obtenir ces clés Nom. P>
NIKOLAMKD code> Guide, c'est ce que j'ai fait jusqu'à présent, mais la liste renvoie tous les programmes, avec "Aucune préférence" de toutes les lignes, même au premier, j'ai sauvé les préférences partagées Avec mon activité: p>
6 Réponses :
C'est une bonne question, et je ne pense pas qu'il y ait une façon directe de le faire. La meilleure façon de le faire serait de stocker ces noms dans une partie defaultharedPreferences ou une sorte de tableau global, String packageName = String packageName = context.getPackageName();
Resources resources = context.getResources();
String sharedPrefName = resources.getResourceEntryName(R.id.PREFERENCES_RESOURCE_ID);
sharedPrefName = packageName+"_"+sharedPrefName;
Non, je veux dire tout le programme sur le téléphone, ce qui signifie que je ne sais pas quels programmes / activités les a sauvés. J'ai édité mon poste pour plus d'informations.
Obtenez toutes les transférences.xml de p>
Anse Paysez le XML, dans le XML, il y a un nom pour chaque touche. Je pourrais mal comprendre votre question p> / data / data / (package) / partage_prefs / (package) _preferences.xml code> p>
Où est le dossier de données? Comment puis-je le lire? Ai-je besoin d'une permission? Je ne peux même pas voir ce dossier dans IO File Manager code> ou de mon PC.
C'est dans votre perspective DDMS de votre IDE, puis dans l'explorateur de fichiers, vous pouvez trouver des annuaires téléphoniques. Vous pouvez le savoir avec l'assetmanager. Les autorisations sont basées sur vos répertoires, -D - XWR --- Quelque chose comme ça, mais surtout tous les annuaires permettent de lire, car c'est ce dont vous avez besoin.
Qu'en est-il du paquet? Je ne sais pas quels programmes sont sur l'appareil, je veux les énumérer tous? BTW, le dossier de données est lu à partir de DDMS est un dossier vide.
Peut-être que le programme n'a pas enregistré de préférences. context.getpackaganager (). QueryIntenctivités (intention, 0); Voici comment vous répertoriez toutes les applications installées. Ensuite, utilisez la liste des noms, à itérer. Le reste est logique ..
Bonjour, j'ai édité ma question. S'il vous plaît donnez-moi des conseils. Merci.
Quelle est la sortie que vous obtenez de la liste
Hey, ai-je besoin de privilège? Mon téléphone est enraciné, mais quand j'utilise DDMS code>, l'ensemble du dossier
data code> est toujours vide!
Essayez-le sur l'émulateur, l'émulateur a un accès root aux données système. Si vous réussissez sur l'émulateur, vous allez également sur votre téléphone enraciné. Je n'ai jamais essayé sur le périphérique actuel .. :)
Le plaisir est pour moi. Je suis content de vous aider.
Ne pensez pas que cela soit possible, vous ne pouvez pas lire d'autres applications / données / données / dossiers. Sur l'émulateur, vous pouvez les lire car vous avez un accès root. P>
Puis-je faire cela si mon application a un privilège root?
Oui, ça devrait. La racine a accès au dossier / dossier de données / données et sous-dossiers. Complete Chemin sur les préférences partagées Le fichier est / Data / Data / [Nom du paquet] / Shared_PRefS / [Nom de fichier] .xml
lecteur = nouveau filereader ("/ Data / Data /" + app [i] + "/ Shared_PRefs /" + app [i] + "_preferences.xml"); code> ne fonctionnera pas parce que le XML Le fichier peut être nommé autre chose que le nom du package. Vous devriez analyser tous les fichiers dans le cadre du dossier / Shared_PRefS.
Merci pour vos informations utiles! J'ai terminé le programme.
Utilisez le SharedPreference.getall (); code> qui renvoie une carte
code>. p>
Essayez ceci:
Map<String, ?> allPrefs = prefs.getAll(); //your sharedPreference Set<String> set = allPrefs.keySet(); for(String s : set){ LOG.d(TAG, s + "<" + allPrefs.get(s).getClass().getSimpleName() +"> = " + allPrefs.get(s).toString()); }
Vous pouvez faire boucler tous les fichiers XML de votre répertoire de préférence partagé et obtenir le nom de tous les fichiers qui sont les noms de préférence partagés dans votre application.
File src = new File("/data/data/" + BuildConfig.APPLICATION_ID + "/shared_prefs"); if (src.isDirectory()) { String files[] = src.list(); for (int i = 0; i < files.length; i++) { if (files[i].contains(".xml")) { reloadSharedPreference(context, files[i].replace(".xml", "")); } } }
Votre application sonne comme si elle aura besoin de privilèges root.
@Tom Dignan: Je l'ai déjà enraciné!
@Tom DIGNAN: ERR, que vous voulez dire? Racissez le téléphone ou les privilèges root pour le logiciel? Pourrais-je résoudre ce problème par quand même?
Les préférences sont généralement privées à une application, de sorte que si le périphérique n'est enraciné, vous ne pourrez pas lire les magasins de préférence d'applications arbitraires.
Cela ne suce pas .. c'est ce qu'on appelle la sécurité ....