Доступ к внутренней памяти
Вопрос наверное уже давно заезженный...
Но ни как не могу разобраться, как сохранять и загружать файлы из внутренней памяти телефона. Именно та память, где находятся папки: Android, DCIM, Download, Movies, Music и т.д., а не внутреннее хранилище (память для приложения) или внешняя память (СД карта)
В манифест добавил:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
с помощью
Environment.getExternalStorageDirectory().getAbsolutePath();
мне удалось получить "/storage/emulated/0". Что это такое? Почему на ВМ (Nexus 5 API 25 и Pixel 3a API 30) при поиске в этой папке других папок, они, вроде как, находятся, а на моём honor 9x (Android ver. 10) не находятся.
ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
возвращает 0.
Другими словами, я ищу следующую папку:
- Включаю телефон, Нажимаю на значёк "Файлы", Выбираю место "Телефон", и вижу папки: Android, DCIM, Download, Movies, Music, Telegram, VK и ещё какие-то...
- Подключаю тф к компу, выбираю передачу файлов, открывается папка, а в ней папка "Внутренняя память", а в ней те же папки, что и в п.1.
Ответы (3 шт):
Пример получения папки Downloads
Из фрагмента
val downloadFolder = requireContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS
Из активити
val downloadFolder = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)
Сначала нужно определиться с понятиями внутреннее или внешнее хранилище (или память).
Внешнее хранилище не означает, что это обязательно SD карта, хотя на старых Андроидах так и было и метод getExternalFilesDir мог вернуть null.
Принципиальное отличие состоит в том, что к папке getFilesDir имеет доступ только ваше приложение, а getExternalFilesDir все приложения и пользователь.
В них может находиться все, что угодно и это тоже не способ идентификации.
Здесь очень много терминологии :)
По прогерски:
- Internal storage - это то что доступно только приложению - возвращается через
Context.getFilesDir() - External storage - это все другое (не только SD карта, но также и внутреннее хранилище телефона)
- Primary External storage - несьемная память аппарата
- Secondary External storage - SD карта или USB носитель
По юзерски:
- Internal memory - внутренняя память телефона
- External memory - внешняя память телефона (SD карта, USB носитель и т.д.)
Так вот все доки/вызовы API трактуют именно прогерское понимание - учитывайте это.
Теперь к сути вопроса.
Environment.getExternalStorageDirectory() - уже довольно давно объявлен устаревшим. Сейчас все активно переходят на т.н. ScopedStorage.