41 votes

Environment.getExternalStorageDirectory ne renvoie pas le chemin vers le stockage amovible

Comme d'API de niveau 8, il semble que Android a redéfini ce "externe" de stockage est. De la lecture à travers http://developer.android.com/reference/android/os/Environment.html, jointe à la documentation de getExternalStorageDirectory - je voir le commentaire: "ne soyez pas confus par le mot "externe" ici. Ce répertoire peut être mieux pensé que les médias/de stockage partagé... Dans les appareils avec plusieurs "externes" répertoires de stockage... , ce répertoire représente le "primaire" de stockage externe que l'utilisateur va interagir avec."

Mon appli écrit les fichiers sur le chemin obtenu en getExternalStorageDirectory, et j'ai eu les utilisateurs demandent une option pour écrire à leurs amovible carte SD à la place. J'avais toujours supposé que l' getExternalStorageDirectory retourne le chemin d'accès à la carte SD amovible, mais ce n'est plus vrai. Comment puis-je accéder au chemin d'accès à la carte SD?

34voto

Aleadam Points 25433

Selon la source, getExternalStorageDirectory est mis en œuvre pour retourner tout est défini comme "stockage externe" dans l'appareil de l'environnement:

public static File getExternalStorageDirectory() {
    return EXTERNAL_STORAGE_DIRECTORY;
}

et EXTERNAL_STORAGE_DIRECTORY est:

private static final File EXTERNAL_STORAGE_DIRECTORY
        = getDirectory("EXTERNAL_STORAGE", "/sdcard");

static File getDirectory(String variableName, String defaultPath) {
    String path = System.getenv(variableName);
    return path == null ? new File(defaultPath) : new File(path);
}

En revanche, getExternalStoragePublicDirectory(String type) requiert l'un de ces chaînes:

DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES, DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS, ou DIRECTORY_DCIM. Ne peut pas être null.

donc, il n'est pas destiné à retourner la carte sd de la racine.

Une alternative:

Enfin, getExternalStorageState() sera de retour le système de fichiers monté en /mnt/sdcard/. Selon CommonsWare dans cette réponse: Trouver une carte SD externe emplacement, il n'existe aucun moyen pour obtenir directement la carte sd externe (si elle existe).

Une alternative serait de vérifier isExternalStorageRemovable () , et de donner une option manuelle si elle est fausse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X