web-dev-qa-db-fra.com

getExternalStorageDirectory ne fonctionne pas

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?

44
Luke Pring

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.

15
Raghav Sood

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" />
9
ohaleck

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

5
Alban Dericbourg

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

1
farshad22

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.

0
Frank Schwieterman

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/.

0
thejh