Разница между getExternalFilesDir и getExternalStorageDirectory()

Я понимаю, что ExternalFiles должен использоваться на API 8, а getExternalStorageDirectory - на 7 и ниже. Однако я немного смущен между использованием. Например, я хотел проверить, что папка, которая существует, и ранее вы использовали бы что-то вроде:

File ChildFolder = new File(Environment.getExternalStorageDirectory() + "/ParentFolder/Child");

Однако каждый пример, который я вижу, говорит использовать getExternalFilesDir (null), File.ext. Поскольку я выше API 8, я хочу использовать этот метод, но как я могу просто проверить папку? Я проверю наличие файлов в другой точке, но пока просто хочу посмотреть, существуют ли папки?

ТИА JB

Ответ 1

getExternalFilesDir()

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

getExternalStorageDirectory()

Он возвращает корневой путь к вашей SD-карте (например, mnt/sdcard/). Если вы сохраните данные по этому пути и удалите приложение, эти данные не будут потеряны.

Ответ 2

Прежде всего, нам нужно понять, что такое различие между внутренним хранилищем, внешним хранилищем (ака первичного внешнего хранилища) и вторичным внешним хранилищем?

Внутреннее хранилище: - это хранилище, недоступное пользователю, за исключением установленных приложений (или путем укоренения их устройства). Пример: data/data/app_packageName

Первичное внешнее хранилище. Встроенное разделяемое хранилище, которое "доступно пользователю, подключив USB-кабель и устанавливая его как диск на главном компьютере". Пример: Когда мы говорим Nexus 5 32 ГБ.

Вторичное внешнее хранилище: Съемное хранилище. Пример: SD-карта.

getExternalFilesDir (String type)

Он возвращает путь к папке файлов внутри Android/data/data/your_package/на основном внешнем хранилище. Это встроенное хранилище.

getExternalStorageDirectory ()

Он вернет путь к основному каталогу внешнего хранилища

Ответ 3

! ВАЖНОЕ ОБНОВЛЕНИЕ! для тех, кто сталкивается с этим вопросом.

Поскольку это несколько старый вопрос, просто хотел предоставить дополнительную информацию. Поскольку для KitKat даже приложения с разрешением WRITE_EXTERNAL_STORAGE разрешено писать на Android/data/data/your_package/ на внешнем хранилище, aka getExternalFilesDir()

Если вы попытаетесь записать на getExternalStorageDirectory() + "/somefolder/anotherfolder/", вы получите SecurityException на большинстве устройств