J'essaie d'enregistrer un fichier sur ma carte SD sur mon Samsung Galaxy Nexus exécutant 4.2.2. Depuis mon application, j'utilise
Environment.getExternalStorageDirectory()
Mais ça revient
/storage/emulated/0/
Ce n'est pas là que se trouvent mes informations de carte SD. Existe-t-il une méthode de travail que je peux utiliser pour obtenir le chemin correct vers ma carte SD?
En fait, c'est le bon emplacement.
À partir de Android 4,2 et plus, Google a introduit plusieurs comptes d'utilisateurs. Chaque utilisateur a son propre stockage externe, qui a l'ID utilisateur dans le chemin pour maintenir l'unicité.
L'ID de l'utilisateur principal (par défaut) est 0. Vous obtenez donc /storage/emulated/0/
comme chemin d'accès au stockage externe.
Je viens d'apprendre que c'est la façon dont le Jelly Bean résout le manque de Android.permission.WRITE_EXTERNAL_STORAGE
autorisation. Je n'ai pas vu un tel comportement avec les anciennes versions d'Android.
Ajoutez simplement cette ligne à votre AndroidManifest.xml:
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
Environment.getExternalStorageDirectory()
fait référence à tout ce que le fabricant de l'appareil considère comme "stockage externe". Je peux être autre chose que la carte SD.
Vous pouvez obtenir plus d'informations ici: Trouver un emplacement de carte SD externe
Je pense que c'est en raison de l'utilisation de l'émulateur Genymotion, le chemin est vrai et dans Eclipse, il se situe à
File Explorer - > mnt - > Shell - > emulated -> 0
j'espère que ça aide ;)
J'ai en quelque sorte perdu mon lien symbolique dans/storage/emulated/0, provoquant un échec similaire. Ce que j'ai fait, c'est utiliser l'application appareil photo pour prendre une photo. J'ai observé que les détails des images indiquaient qu'il se trouvait dans/storage/emulated/0, bien que ce répertoire n'existait pas dans l'explorateur de fichiers. Ensuite, j'ai redémarré le téléphone. Après le redémarrage, le lien existait.
Sûr? Où pensez-vous que votre carte SD est montée? Essayez de faire ls -l
sur ce répertoire - c'est probablement un lien symbolique vers /storage/emulated/0/
.