В чем отличие getExternalFilesDir от getExternalStorageDir?

354
05 января 2017, 05:50

В чем отличие getExternalFilesDir от getExternalStorageDir???

Answer 1

Метод getExternalFilesDir(...) возвращает объект класса File, позиционируемый по пути Android/data/data/%APP_PACKAGE_NAME%/ в primary shared/external storage.

Метод getExternalStorageDirectory() возвращает объект класса File, позиционируемый по пути (примерно) mnt/sdcard/ (путь к primary shared/external storage).

Answer 2

В Android есть несколько типов хранилищ, на которых могут храниться файлы: внутреннее (internal storage), основное внешнее (primary external storage), дополнительное внешнее (seconday external storage).

Основное внешнее хранилище - это дополнительная SD-карта или часть встроенной флэш-памяти, выделенная в отдельную файловую систему. Эта файловая система доступна для чтения и записи приложениям. Путь к корню основного внешнего хранилища можно получить с помощью getExternalStorageDirectory().

Операционная система для своих нужд может создавать каталоги на основном внешнем хранилище. В частности на нем создаются каталоги для данных приложений. Структура этих каталогов от версии к версии и от устройства к устройству может меняться, поэтому для удобства разработчикам предоставлени функция getExternalFilesDir(), которая возвращает путь к каталогу приложения на внешнем хранилище. При необходимости этот каталог будет создан операционной системой.

У функции getExternalFilesDir() есть параметр, в котором можно указать тип данных, которые предполагается хранить: DIRECTORY_PICTURES, DIRECTORY_MUSIC и т.д. Для каждого типа данных будет создан свой каталог.

Обратите внимание, что работа с данными в каталоге getExternalFilesDir() на Android старше 4.4 (SDK меньше 18) требует разрешения:

<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="18" />

Работа с остальными каталогами внешнего хранилища требует разрешения всегда. Причем это разрешение "опасное", поэтому начиная с SDK 23 его необходимо запрашивать у пользователя и проверять результат (но это тема отдельного рассказа).

Советую прочитать еще раз "Руководство", там есть целый раздел.

Если сложно с английским, в разделе "Курсы" есть рассказ на русском про работу с файлами.

READ ALSO
NullPointerException при клике на элемент

NullPointerException при клике на элемент

Есть список имен, по которому нажимаюПосле чего должен сохраняться нажатый элемент, который я использую в другом фрагменте

294
Ошибка при отправке файла на сервер Retrofit2

Ошибка при отправке файла на сервер Retrofit2

Отправляю файл на сервер с помощью Retrofit2, использую POST метод для отправки файла, POST метод принимает два параметра "file" и "shared-with":

300
Java. Совместимось интерфейсов

Java. Совместимось интерфейсов

В Java 15 был введен интерфейс Closeable с одним методом close()

273
Не воспроизводится ts-поток

Не воспроизводится ts-поток

Пытаюсь воспроизвести закодированный h264 в MPEG-TS видеопоток, используя стандартный VideoViewВся программа состоит из одной activity с VideoView, Button и EditText

304