Разница между 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 на большинстве устройств