Я понимаю, что ExternalFiles должен использоваться в API 8 и выше, а getExternalStorageDirectory - для 7 и ниже. Однако я немного запутался в использовании. Например, я хотел проверить, существует ли папка, и раньше вы могли бы использовать что-то вроде:
File ChildFolder = new File(Environment.getExternalStorageDirectory() + "/ParentFolder/Child");
Однако в каждом примере, который я вижу, говорится об использовании getExternalFilesDir (null), File.ext. Поскольку у меня уровень выше API 8, я хочу использовать этот метод, но как мне просто проверить наличие папки? Я проверю наличие файлов в другой момент, а пока просто хочу посмотреть, существуют ли папки ??
getExternalStorageDirectory()
это не обязательно - возможно, даже не всегда - возвращает «путь к вашей SD-карте». Вместо этого он возвращает «каталог основного внешнего хранилища». В документации ( developer.android.com/reference/android/os/… ) говорится:Прежде всего, нам нужно понять, в чем разница между внутренним хранилищем, внешним хранилищем (также известным как основное внешнее хранилище) и вторичным внешним хранилищем?
Внутреннее хранилище: хранилище, к которому пользователь не может получить доступ, кроме как через установленные приложения (или путем рутирования их устройства). Пример: data / data / app_packageName
Первичное внешнее хранилище: встроенное общее хранилище, которое «доступно для пользователя, подключив USB-кабель и установив его как диск на главном компьютере». Пример: когда мы говорим Nexus 5 32 ГБ.
Вторичное внешнее хранилище: съемное хранилище. Пример: SD-карта.
Он возвращает путь к папке с файлами внутри Android / data / data / your_package / на основном внешнем хранилище. Это встроенное хранилище.
Он вернет путь к каталогу вторичного внешнего хранилища.
источник
File getExternalStoragePublicDirectory (String type)
иFile getFilesDir ()
также! ВАЖНОЕ ОБНОВЛЕНИЕ! для тех, кто сталкивается с этим вопросом.
Поскольку это несколько старый вопрос, я просто хотел предоставить дополнительную информацию. Так как KitKat даже приложение , которые имеют WRITE_EXTERNAL_STORAGE разрешения будет разрешено только для записи на Android / данные / данные / your_package / на внешнем накопителе, иначе
getExternalFilesDir()
Если вы попытаетесь написать,
getExternalStorageDirectory() + "/somefolder/anotherfolder/"
вы получите SecurityException на большинстве устройств.источник
!! ВАЖНЫЙ !!
Environment.getExternalStorageDirectory()
является устаревшим и контекст # getExternalFilesDir (String), MediaStore или Намерение # ACTION_OPEN_DOCUMENT, следует использовать вместо этого.https://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory ()
Также, начиная с Android.M, разработчикам необходимо запрашивать разрешения во время выполнения.
См. Более подробную информацию в документации здесь и в этом вопросе
Environment.getExternalStorageDirectory () устарела на уровне API 29 java
источник