web-dev-qa-db-fra.com

Environment.getExternalStorageDirectory (). GetAbsolutePath () donne un chemin différent - Android

J'essaie d'écrire quelque chose dans la mémoire de mon téléphone.

Au début, j'ai codé en dur le chemin comme suit:

myFile = new File("/sdcard/" + txtName.getText() + ".txt");

Cela fonctionne totalement ok.

Et puis, Eclipse me prévient que je n'aurais pas dû coder en dur le chemin comme ça, je devrais faire ce qui suit:

myFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/"+ txtName.getText() + ".txt");

Ensuite, je suis la suggestion de correction et évite l’avertissement.

Cependant, j'ai rencontré une exception d'exécution sur la classe writer.

Ensuite, j’imprime Environment.getExternalStorageDirectory().getAbsolutePath() à des fins de débogage. Le résultat est

/ stockage/sdcard0

. Mais celui codé en dur qui fonctionnait parfaitement bien avant est en réalité 

/carte SD

.

Pourquoi cela arriverait-il?

Et si je souhaite éviter l'avertissement, comment puis-je obtenir le répertoire du chemin d'une manière plus "formelle et correcte" au lieu de coder en dur le chemin?

P.S .: Mon téléphone est HTC One X, qui n'a AUCUN logement de carte SD externe. Je suppose que la mémoire de 32 Go est fournie avec une carte SD intégrée et que, par conséquent, l’essence devrait être la même.

11
Sibbs Gambling

Pourquoi cela arriverait-il?

Comme le chemin d'accès au stockage externe a changé au fil des ans, c'est pourquoi vous n'auriez jamais dû le coder en dur.

comment puis-je obtenir le répertoire de chemin d'une manière plus "formelle et correcte" au lieu de coder en dur le chemin?

Utilisez Environment.getExternalStorageDirectory().

/sdcard est un lien symbolique ou physique vers /storage/sdcard0, défini par le fabricant du périphérique. Cependant, rien ne garantit que tous les périphériques auront un tel lien symbolique /sdcard.

Je suppose que le stockage de 32 Go est livré avec une carte SD intégrée

Le stockage externe est une partie de vos 32 Go de mémoire flash embarquée.

15
CommonsWare

Supprimez le .getAbsolutePath () et tout ira bien. Environment.getExternalStoreDirectory () vous indiquera le chemin où le fabricant a défini son stockage externe. 

0
3rdeye7