Environment.getExternalStorageState()
renvoie le chemin vers le point de montage interne de la carte SD comme "/mnt/sdcard".
Non, Environment.getExternalStorageDirectory()
fait référence à ce que le fabricant de l'appareil considère comme un "stockage externe". Sur certains appareils, il s'agit d'un support amovible, comme une carte SD. Sur certains appareils, il s'agit d'une partie de la mémoire flash de l'appareil. Ici, "stockage externe" signifie "le matériel accessible via le mode USB Mass Storage lorsqu'il est monté sur une machine hôte", au moins pour Android 1.x et 2.x.
Mais la question porte sur les SD externes. Comment obtenir un chemin comme "/mnt/sdcard/external_sd" (il peut être différent d'un périphérique à l'autre) ?
Android n'a pas de concept de "SD externe", en dehors du stockage externe, comme décrit ci-dessus.
Si le fabricant d'un appareil a choisi que le stockage externe soit une mémoire flash intégrée et qu'il dispose également d'une carte SD, vous devrez contacter ce fabricant pour déterminer si vous pouvez ou non utiliser la carte SD (ce qui n'est pas garanti) et quelles sont les règles pour l'utiliser, comme le chemin à utiliser.
UPDATE
Deux choses récentes à noter :
Tout d'abord, sous Android 4.4+, vous n'avez pas accès en écriture aux supports amovibles (par exemple, "SD externe"), à l'exception des emplacements sur ces supports qui pourraient être renvoyés par la fonction getExternalFilesDirs()
et getExternalCacheDirs()
. Voir L'excellente analyse de Dave Smith de cela, en particulier si vous voulez les détails de bas niveau.
Deuxièmement, si quelqu'un veut savoir si l'accès aux supports amovibles fait ou non partie du SDK Android, voici ce qui suit L'évaluation de Dianne Hackborn :
...gardez à l'esprit que, jusqu'à Android 4.4, la plate-forme officielle Android ne prenait pas en charge les cartes SD. tous à l'exception de deux cas particuliers : la disposition de stockage à l'ancienne où le stockage externe est une carte SD (qui est toujours prise en charge par la plate-forme aujourd'hui), et une petite fonctionnalité ajoutée à Android 3.0 qui permet de scanner les cartes SD supplémentaires, de les ajouter au fournisseur de médias et de donner aux applications un accès en lecture seule à leurs fichiers (qui est également toujours prise en charge par la plate-forme aujourd'hui).
Android 4.4 est la première version de la plate-forme qui autorise les applications à utiliser les cartes SD pour le stockage. Avant cela, tout accès à ces cartes se faisait par le biais d'API privées et non prises en charge. Nous disposons désormais d'une API assez riche dans la plate-forme qui permet aux applications d'utiliser les cartes SD d'une manière prise en charge, et d'une meilleure manière qu'auparavant : elles peuvent utiliser librement leur zone de stockage spécifique à l'application sans avoir besoin d'autorisations dans l'application, et peuvent accéder à tout autre fichier sur la carte SD à condition de passer par le sélecteur de fichiers, là encore sans avoir besoin d'autorisations spéciales.
0 votes
Voici ma solution qui fonctionne jusqu'à Nougat : stackoverflow.com/a/40205116/5002496
0 votes
Environment.getExternalStorageState() renvoie le chemin du point de montage interne de la carte SD, comme "/mnt/sdcard". Eh bien, ce n'est pas interne dans le sens où Android utilise ce terme. Je crois que le terme que vous cherchez est "non amovible".
1 votes
adb shell echo $EXTERNAL_STORAGE