Pourquoi getExternalFilesDirs() ne fonctionne pas sur certains appareils?
Mon application tourne sous Android 5.0. J'utilise la méthode getExternalFilesDirs()
pour vérifier si la carte SD externe est disponible. Si elle renvoie plus de 1 File
, que signifie la carte SD externe existe.
Mais sur certains appareils (par exemple Elephone G2), la méthode getExternalFilesDirs()
ne renvoie qu'un seul répertoire de stockage principal. Je suis sûr que l'appareil a carte SD externe (/storage/sdcard1/).
Quelqu'un peut-il me donner la réponse?
- Sans doute, le fabricant de l'Elephone décidé de ne pas permettre aux développeurs d'avoir accès à un support amovible. Ou, peut-être ils ont foiré lors de la configuration de leur ROM.
- Il devrait être la réponse. Je ne comprends vraiment pas pourquoi
getExternalFilesDirs()
ne fonctionne pas. Il fonctionne sur presque périphériques. - Avez-vous des android.la permission.WRITE_EXTERNAL_STORAGE dans votre AndroidManifest.xml fichier?
- Bien sûr que oui. Comme je l'ai dit, il fonctionne sur presque périphériques.
- on dirait que vous stumled sur une moitié vendeur ROM :/
- Oui ça arrive à beaucoup de kitkat appareils. Essayez
System.getenv("EXTERNAL_STORAGE");
etSystem.getenv("SECONDARY_STORAGE");
. - Il arrive même, sur certains Sucette appareils.
- J'ai essayé avec
System.getenv("EXTERNAL_STORAGE")
et il est retourné /storage/emulated/legacy. Quel est-il? Dans mon appareil, j'ai /storage/sdcard1. Ils sont différents dossiers. - J'ai hâte de commentaire jusqu'à ce que vous avez essayé l'un avec stockage secondaire trop. Pour le reste, il semble que si vous n'avez jamais parcouru avec un explorateur de fichiers de l'application sur votre appareil, car ensuite, vous savez ces chemins.
Vous devez vous connecter pour publier un commentaire.
Pour getExternalFilesDirs pour retourner le chemin de la carte sd, l'équipementier doit avoir installé le
SECONDARY_STORAGE
variable d'environnement dans le dispositif spécifique init.rc fichier comme indiqué ici:https://source.android.com/devices/storage/config-example.html
Regardez la source de
getExternalFilesDirs
ici:http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/app/ContextImpl.java#1039
La valeur est obtenue à partir de
Environment.buildExternalStorageAppFilesDirs
. Regardez le code source ici:http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/os/Environment.java#206
La valeur dépend de
mExternalDirsForApp
, qui à son tour est peuplé de lire le contenu de SECONDARY_STORAGE variable:http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/os/Environment.java#136
Comme vous pouvez le voir, si la SECONDARY_STORAGE variable n'est pas définie, la sdcard chemin d'accès ne seront pas retournés.
Vous pouvez le vérifier en accédant à
adb shell
et à la recherche, à la sortie deecho $SECONDARY_STORAGE
$SECONDARY_STORAGE
, tout ce que vous devez faire est de demander WRITE_EXTERNAL_STORAGE l'autorisation. Aucune autre modification n'est nécessaire, et j'ai testé cette.Dans mes projets à l'aide de ce code & je n'ai pas de problème.
méthode de getExternalFilesDirs return array avec 2 longueur.
Dirs[0] ==> Internal Sorage
Dirs[1] ==> External Storage
ContextCompat
? J'utilise la méthodegetExternalFilesDirs(String fileName)
deContext
. Il fonctionne sur presque périphériques.ContextCompat.getExternalFilesDirs
pasContext. getExternalFilesDirs
. Src liengetExternalFilesDirs
ne devrais pas besoin de WRITE_EXTERNAL_STORAGE l'autorisation. SeulementgetExternalStorageDirectory
a besoin de cette autorisation.cette question, il ya certains de Lenovo dispositif.
ma solution est de cette.