According to the source, getExternalStorageDirectory
is implemented to return whatever is set as "external storage" in the device environment:
public static File getExternalStorageDirectory() {
return EXTERNAL_STORAGE_DIRECTORY;
}
and EXTERNAL_STORAGE_DIRECTORY
is:
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);
}
In contrast, getExternalStoragePublicDirectory(String type)
requires one of these strings:
DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES, DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS, or DIRECTORY_DCIM. May not be null.
so it is not meant to return the sd-card root.
An alternative:
Finally, getExternalStorageState()
will return the filesystem mounted in /mnt/sdcard/
. According to CommonsWare in this answer: Find an external SD card location, there is no way to directly get the external sdcard (if it even exist).
An alternative would be to check isExternalStorageRemovable ()
and give a manual option if it is false.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…