Environment.getExternalStorageState()
возвращает путь к внутренней точке монтирования SD, например "/ mnt / sdcard"
Нет, Environment.getExternalStorageDirectory()
относится к тому, что производитель устройства считает «внешним хранилищем». На некоторых устройствах это съемный носитель, например SD-карта. На некоторых устройствах это часть флэш-памяти на устройстве. Здесь «внешнее хранилище» означает «содержимое, доступное через режим USB Mass Storage при подключении к хост-машине», по крайней мере для Android 1.x и 2.x.
Но вопрос по внешней SD. Как получить путь типа "/ mnt / sdcard / external_sd" (он может отличаться от устройства к устройству)?
Android не имеет понятия «внешний SD», кроме внешнего хранилища, как описано выше.
Если производитель устройства выбрал встроенную флэш-память, а также имеет SD-карту, вам нужно будет связаться с этим производителем, чтобы определить, можете ли вы использовать SD-карту (не гарантируется) и какие правила его использования, например, какой путь использовать для него.
UPDATE
Две последние заметки:
Во-первых, в Android 4.4+ у вас нет доступа для записи на съемные носители (например, «внешняя SD-карта»), за исключением любых мест на этом носителе, которые могут быть возвращены getExternalFilesDirs()
и getExternalCacheDirs()
. См. превосходный анализ Дейва Смита этого, особенно если вы хотите детали низкого уровня.
Во-вторых, чтобы никто не спорил о том, является ли доступ к съемным носителям иным образом частью Android SDK, вот оценка Дайан Хакборн :
... имейте в виду: до Android 4.4 официальная платформа Android не поддерживала SD-карты на all , за исключением двух особых случаев: макет старой школы, где внешним хранилищем является SD-карта ( которая по-прежнему поддерживается платформой сегодня), и небольшая функция добавлена в Android 3.0, где она будет сканировать дополнительные SD-карты и добавлять их к поставщику мультимедиа и предоставлять приложениям доступ только для чтения к своим файлам (что также все еще поддерживается в платформа сегодня).
Android 4.4 - это первая версия платформы, которая фактически позволила приложениям использовать SD-карты для хранения. Любой доступ к ним до этого осуществлялся через частные неподдерживаемые API. Теперь у нас есть довольно богатый API в платформе, который позволяет приложениям использовать SD-карты поддерживаемым способом, лучше, чем они могли раньше: они могут бесплатно использовать свою область хранения, специфичную для приложения, без необходимости какого-либо разрешения в приложении, а также доступ к любым другим файлам на SD-карте, если они проходят через средство выбора файлов, опять же, без необходимости каких-либо специальных разрешений.