Подтвердить что ты не робот

Где мое местоположение sdcard на 4.4.2?

В Android 4.4.2 Environment.getExternalStorageDirectory().getPath() возвращается /storage/emulated/0, но этот путь не существует на моем Nexus5 Android 4.4.2. Environment.getExternalStorageDirectory().getPath() работал до Android 4.4.2.

Как я могу получить путь /sdcard на Android 4.4.2?

4b9b3361

Ответ 1

Этот путь не существует на моем Nexus5 Android 4.4.2.

Да, это так, для вашего процесса во время выполнения.

Например, этот примерный проект загружает файл в Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS). Если вы регистрируете местоположение во время выполнения, при запуске его на Nexus 5, оно отображается как /storage/emulated/0/Download. И загрузка будет успешной.

Если вы ищете /storage/emulated/0 через DDMS или adb shell, вы не найдете его. Для этих инструментов внешнее хранилище по умолчанию /mnt/shell/emulated/0. Следовательно, загруженный файл из приведенного выше примера появится в каталоге /mnt/shell/emulated/0/Download.

AFAIK, разница привязана к предоставлению отдельного внешнего хранилища для вторичных учетных записей.

Ответ 2

Иногда/storage/emulated/0 может быть записано, но чтение не выполняется... поэтому тестов для "возможности записи" недостаточно. Это такая неприятная проблема, я придумал столь же раздражающее, но эффективное решение. Hardcode "/mnt/sdcard" Да, я это сказал.

Похоже, что кто-то еще сказал это первым... хранение данных приложений Android на SD-карте

Больше радости... http://forums.bignerdranch.com/viewtopic.php?f=414&t=7407

Ответ 3

В документации Storage Options используется Environment.getExternalStorageDirectory() (как вы уже правильно используете). Эта функция доступна для всех версий Android.

Вы видите, что он возвращает путь, который фактически не доступен на устройстве 4.2?

Обратите внимание (от Environment.getExternalStorageDirectory()):

Приложения не должны напрямую использовать этот каталог верхнего уровня, чтобы не загрязнять пространство имен пользователя root. Любые файлы, которые являются приватными для приложения, должны быть помещены в каталог, возвращенный Context.getExternalFilesDir, который система позаботится об удалении, если приложение будет удалено. Другие общие файлы должны быть помещены в одну из каталогов, возвращаемых getExternalStoragePublicDirectory (String).

Для записи на этот путь требуется разрешение WRITE_EXTERNAL_STORAGE, и для начала доступа к чтению требуется разрешение READ_EXTERNAL_STORAGE, которое автоматически предоставляется, если вы сохраняете разрешение на запись.

Начиная с KITKAT, если вашему приложению нужно хранить только внутренние данные, рассмотрите возможность использования getExternalFilesDir (String) или getExternalCacheDir(), для которых нет необходимости читать или писать.