Copiez le partagé préférences de fichier XML à partir de données /Samsung périphérique a échoué
Il y a une exportation dans mon application. C'est juste une opération de copie depuis tous mes paramètres sont partagés préférence.
J'ai juste copier le fichier xml à partir d' /data/data/package.name/shared_prefs/settings.xml pour la carte SD. Il fonctionne très bien sur mon HTC desire. Cependant, il pourrait ne pas fonctionner sur les appareils Samsung, et j'ai eu l'erreur suivante lors de la j'ai essayer de copier le fichier.
J'/Système.( 3166): /data/data/package.name/shared_prefs/settings.xml (Aucun fichier ou répertoire) dans le répertoire.
Ce que quelqu'un sait comment résoudre le problème, ou est-il un autre moyen simple de stocker l'partagé préférence ?
Grâce.
OriginalL'auteur dong221 | 2011-04-03
Vous devez vous connecter pour publier un commentaire.
CommonsWare suggéré un être intelligent hack, mais malheureusement il ne fonctionne pas.
Samsung n'est pas toujours le shared_prefs répertoire dans le même répertoire parent comme le
getFilesDir()
.Je le recommande test de l'existence de (coder en dur, sauf pour le nom du paquetage):
/dbdata/databases/<package_name>/shared_prefs/package.name_preferences.xml
et si il existe de l'utiliser, sinon la chute de soit CommonsWare la suggestion denew File(getFilesDir(), "../shared_prefs")
ou tout simplement/data/data/<package_name>/shared_prefs/package.name_preferences.xml
.Un avertissement bien que cette méthode pourrait avoir des problèmes si un utilisateur est passé d'un Samsung rom custom rom sans l'essuyer, comme le
/dbdata/databases
fichier peut être utilisé, mais existent toujours.Plus de détails
Sur certains appareils Samsung, comme le Galaxy S de la série de course de froyo, la configuration est ceci:
/data/data/<package_name>/(lib|files|databases)
Parfois il y a un shared_prefs là aussi, mais il est juste de Samsung tenter de vous confondre! Ne lui fais pas confiance! (Je pense que cela peut-il arriver en la gauche au cours d'une mise à niveau 2.1 à 2.2, mais il pourrait être un reliquat utilisateurs de commutation rom. Je ne sais pas vraiment, j'ai juste tous les deux dans mon application rapport de bug d'interface et de voir parfois les deux fichiers).
Et:
/dbdata/databases/<package_name>/shared_prefs
C'est le vrai shared_prefs répertoire.
Cependant sur la Galaxy Tab sur Froyo, c'est bizarre. Généralement, vous avez:
/data/data/<package_name>/(lib|shared_prefs|files|databases)
Sans
/dbdata/databases/<package_name>
répertoire, mais il semble que le système d'apps ont:/dbdata/databases/<package_name>/yourdatabase.db
Et, en bonus, c'est que
/dbdata/databases/<package_name>
n'est pas supprimé lorsque votre application est désinstallée. Bonne chance à l'aide de SharedPreferences si l'utilisateur ne réinstalle votre application!J'aimerais tout d'abord vérifier (a) /dbdata/bases de données/paquet.nom, puis (b) /data/data/paquet.nom . /dbdata/data/ était une faute de frappe par moi (édité le post pour corriger). (b) compte en premier sur Samsung nettoyage en place, qui ils ne le font pas. (a) compte en premier sur les utilisateurs de nettoyage lors de la commutation d'un Samsung rom normale à la rom. Je parie qu'à partir d'un Samsung rom normal rom nécessiterait essuyez toute façon, mais je ne sais pas.
Il fonctionne à partir du rapport de mes utilisateurs 🙂 Vraiment merci !!
Bien meilleure réponse que le reste.
OriginalL'auteur Kevin TeslaCoil
Jamais never never never never never never never never câblage des chemins.
Malheureusement, il n'y a pas
getSharedPreferenceDir()
n'importe où que je peux penser. La meilleure solution je pense, sera:De cette façon, si le fabricant d'un appareil choisit de changer les noms des partitions, vous êtes couvert.
Essayer cela et voir si ça aide.
Salut, nouveau Fichier(getFilesDir(), "../shared_prefs") ne m' "/data/data/<paquet>/fichiers/../shared_prefs" mais comment obtenir la valeur comme "/data/data/<paquet>/shared_prefs" ?
OriginalL'auteur CommonsWare
Essayez d'utiliser
OriginalL'auteur Xiaoxi Zhang
Meilleure façon d'obtenir le chemin d'accès valide sur tous les appareils - méthode run
Context.getSharedPrefsFile
défini comme:Parce que caché besoin d'utiliser la réflexion et à l'utilisation de repli sur l'échec:
Sur certains Samsungs implémente comme ceci:
Sur d'autres Android, comme ceci:
Après tout changement de Google API de niveau 24 et plus tard:
https://android.googlesource.com/platform/frameworks/base/+/6a6cdafaec56fcd793214678c7fcc52f0b860cfc%5E%21/core/java/android/app/ContextImpl.java
getSharedPrefsFile
dit@deprecated
et à l'utilisation de l'abstraitgetSharedPreferencesPath(String name)
à la place. Javadoc pourgetSharedPreferencesPath
dit@removed
au lieu de@hide
, ne sais pas pourquoi.OriginalL'auteur Enyby
Je l'ai testé dans Samsung P1010 avec:
//I'm in a IntentService class
File file = this.getDir("shared_prefs", MODE_PRIVATE);
J'ai eu:
"/data/data/paquet.nom/app_shared_prefs"
Il fonctionne très bien pour moi. Je peux courir ffmpeg dans ce dossier.
Look:
Contexte.getDir
OriginalL'auteur leonardo
Vous devez créer la
shared_prefs
répertoire:Aussi... le package de votre application est
package.name
? Assurez-vous que vous vous référez au bon paquet.Le vrai nom du package est com.xxx.xxx. Il devrait y avoir aucun problème. merci.
BTW, j'ai copier le fichier à partir de /data/data/package.name/shared_prefs/settings.xml pour sdcard.
Si le dossier existe déjà, alors non, vous n'avez pas à le créer. Assurez-vous que le fichier settings.xml il y a...
OriginalL'auteur Cristian