Согласно источнику , getExternalStorageDirectory
реализован так, чтобы возвращать все, что установлено как «внешнее хранилище» в среде устройства:
public static File getExternalStorageDirectory() {
return EXTERNAL_STORAGE_DIRECTORY;
}
и EXTERNAL_STORAGE_DIRECTORY
- это:
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);
}
В отличие от этого, getExternalStoragePublicDirectory(String type)
требует один из этих строк:
DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES, DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS или DIRECTORY_DCIM. Не может быть нулевым .
, поэтому не предполагается возвращать корень SD-карты.
Альтернатива:
Наконец,getExternalStorageState()
вернет файловую систему, смонтированную в /mnt/sdcard/
.Согласно CommonsWare в этом ответе: Найдите расположение внешней SD-карты , нет способа напрямую получить внешнюю SD-карту (если она вообще существует).
В качестве альтернативы можно было бы проверить isExternalStorageRemovable ()
и указать ручной параметр, если значение равно false.