что лучше всего подходит для хранения больших файлов в android
Какую технику хранения данных Android использовать?
В документации по Android есть следующие варианты ниже, но не объясняет, для каких условий лучше всего подходит. Каковы плюсы и минусы каждого метода? Например, в каких условиях SQL лучше, чем общие настройки?
Различные варианты хранения в Android
Провайдеры контента
Рассмотрите устройство Android как город, приложения в нем – это дома в городе, люди в домах (приложение) – это данные. Теперь контент-провайдер похож на брокера в городе (Android-устройство). Этот брокер предоставляет доступ для людей в городе для поиска различных домов, ссылающихся на то, как поставщик контента в устройстве Android обеспечивает доступ к данным в устройстве для разных приложений.
Общие настройки
Подумайте, у меня есть приложение, в котором говорится о приложении Face Book, которое я использую для входа в свою учетную запись.
Теперь, когда я впервые ввел свое имя пользователя и пароль, чтобы получить доступ к моей учетной записи. Скажем, я вышел из приложения через час снова. Я использую одно приложение Face Book для повторного входа в приложение.
Я должен снова ввести имя пользователя и пароль для входа в свою учетную запись, и я задал тему для своего приложения и других параметров, как мое приложение выглядит на моем текущем телефоне
Это необязательно, потому что считайте, что я использую свой телефон для входа в приложение. Поэтому я всегда буду использовать свой телефон для входа снова и снова, таким образом, ввод моих учетных данных снова и снова – это больше работы, это не удобное приложение
Общие предпочтения очень удобны в таких сценариях, где я могу использовать его функцию для обмена моими данными в XML-файле, который физически существует в приложении Android, установленном на моем телефоне, который не уничтожается, даже если приложение закрыто. Здесь мы можем сохранить данные пользовательских настроек текущего приложения.
В результате в следующий раз, когда я открою свое приложение в своем телефоне, я вижу, что данные автоматически заполняются в необходимых полях, а настройки
Файловое хранилище
В Android мы можем использовать пространство памяти устройства для хранения данных в нем для приложений. Тип данных включает такие вещи, как текстовый файл, файл изображения, видеофайл, аудиофайл и т. Д.
Как видно на рисунке, мы видим, что есть два места, которые мы можем сделать. Один из способов – записать необработанные файлы в первичное / вторичное хранилище. Другой способ – записать файлы кэша в основное / вторичное хранилище.
Существует также разница между хранением необработанных данных и данными кэша, необработанные данные, однажды сохраненные в памяти пользователем, должны быть явно удалены пользователем явно, иначе он существовал бы до тех пор. Данные кэша, хранящиеся в памяти, не являются постоянными данными, потому что система автоматически удаляет их, если чувствует нехватку памяти.
Внутреннее хранилище:
Рассмотрим, что пользователь в приложении хранит данные во внутреннем хранилище, и только тот пользователь этого приложения имеет доступ к этим данным на мобильном устройстве, и эти данные автоматически удаляются, когда пользователь удаляет приложение. Говоря о том, какая внутренняя память является частной.
Каталог внутреннего хранилища приложений хранится с использованием имени пакета имен в специальном месте в файловой системе Android.
Другие приложения или пользователи текущего приложения не имеют доступа к файлу, установленному конкретным пользователем и конкретным приложением, если он явно не доступен для пользователя для доступного для чтения / записи.
SQLite
Sqlite используется для хранения более структурированных данных локально на мобильном устройстве, где работает приложение Android. Структурированные данные включают в себя, как показано на рисунке, как информация ученика в виде строк и столбцов.
Sqlite предлагает аналогичные функции, такие как Mysql и oracle, но с ограниченными функциональными возможностями. Некоторые из них включают выполнение операций с запросами в таблицах. Есть функции, которые похожи на создание представлений, но некоторые функции недоступны, например, хранимые процедуры.
Sqlite очень полезен при хранении сложных и больших данных, которые могут быть загружены один раз и могут использоваться снова и снова до тех пор, пока приложение не будет запущено. Когда приложение закрыто, база данных sqlite также уничтожается.
Соединяя все части
Сетевое соединение относится к хранению данных в облаке. Передача HTTP или FTP файлов и содержимого через пакеты java.net. * Делает это.
SharedPreferences в основном относится к настройкам приложения, доступ к которым вы можете получить через меню настроек – например, настройки приложения. Это хорошая идея, чтобы все здесь было просто: в основном логические флаги, короткие строки или целые числа. Данные SharedPreferences сохраняются при перезагрузке устройства и удаляются вместе с удалением приложения. Данные сохраняются как пара ключ-значение.
Внутреннее хранилище в основном используется для большего хранения данных без постоянной памяти. Вы используете внутреннее хранилище, если хотите обработать изображение, короткий видеоклип, большой текстовый файл и т. Д. Но вы не храните обработанные данные во внутреннем хранилище – его функция больше похожа на ОЗУ ЦП. Объем доступного внутреннего хранилища для вашего приложения зависит от устройства, но всегда рекомендуется хранить что-либо под 1 МБ. Данные ссылаются по пути к файлу.
Внешнее хранилище относится не только к хранилищу SDCard, но и для телефонов верхнего уровня, это может означать внутреннее монтируемое хранилище (например, в Galaxy Nexus или S2). Здесь вы храните большие видеофайлы, изображения с высоким разрешением и 20-мегабайтный текстовый файл, который вы хотите проанализировать в своем приложении. Это также место для хранения данных, которые вы хотите использовать на всех устройствах, если вы меняете SD-карты. На данные также ссылаются по пути к файлу.
Сетевое соединение не является методом хранения данных, но может быть способом сохранения данных для конкретного пользователя, если устройство подключено к Интернету, используя некоторую аутентификацию. Вы должны балансировать между загрузкой данных каждый раз, когда приложение нуждается в ней, или с одноразовой синхронизацией данных, что в конечном итоге приведет к другому варианту хранения, упомянутому выше.
Общие предпочтения – пары ключ / значение, не более того. Поэтому, если вы хотите отслеживать, скажем, студенты и их тестовый результат, это действительно не сработает.
База данных – это просто база данных. Вы можете определить столько столбцов (и таблиц), сколько вам нужно, чтобы выполнить задание.
Если это предпочтение для вашего приложения, используйте общие настройки (почти любое предпочтение, о котором я могу думать, может быть сделано таким образом), если это что-то еще более сложное, используйте базу данных.
10 лучших файловых менеджеров для Android, которые вы должны использовать
Лучшие приложения для управления файлами на Android позволяют просматривать файлы, находить загрузки, управлять пространством для хранения и т. д. На Android есть множество файловых менеджеров, и большинство из них бесплатные.
В то время как некоторые из них предлагают вам премиум-функции за небольшую плату, другие поддерживают рекламу. Итак, без дальнейших задержек, давайте проверим лучшие приложения для управления файлами на Android.
1. Файлы от Google
Если вам нужен самый чистый, серьезный и простой файловый менеджер для Android, не ищите ничего, кроме Files by Google. С мая 2021 года он доступен на большинстве устройств Android под управлением Android 5.0 Lollipop и выше.
Файлы от Google имеют три вкладки: «Очистить», «Обзор» и «Поделиться». На вкладке «Очистить» показано, сколько памяти осталось на вашем устройстве Android и сколько вы используете в настоящее время.
Здесь же вы увидите предложения по очистке памяти вашего телефона. Вкладка «Обзор», с другой стороны, упрощает поиск файлов, разделяя их на разные категории, такие как «Загрузки», «Изображения», «Видео», «Аудио», «Документы» и т. д.
Также есть раздел «Избранное» и защищенная паролем безопасная папка для конфиденциальных документов. Наконец, вкладка «Поделиться» позволяет отправлять / получать файлы кому угодно без подключения к Интернету.
2. Solid Explorer
Solid Explorer — отличное приложение для управления файлами для Android, которое оправдывает свое название. Это одно из лучших приложений в своей категории. Помимо обычных функций управления файлами, Solid Explorer предлагает платные надстройки для поддержки облачного хранилища.
Он позволяет пользователям легко управлять файлами на Google Диске, OneDrive, Dropbox, Box, Яндексе, Mega и т. д. Платные плагины также доступны для поддержки USB OTG (на ходу), Cast и многого другого.
Приложение также позволяет пользователям архивировать (ZIP, 7ZIP, RAR, TAR) и распаковывать файлы, а также поддерживает различные протоколы обмена файлами в сети (FTP, SFTP, WebDav и SMB / CIFS).
Одной из наиболее заметных функций Solid Explorer является защита всех файлов и папок паролем и отпечатками пальцев.
Как и большинство файловых менеджеров, Solid Explorer также разделяет файлы на категории «Загрузки», «Недавние», «Фотографии», «Видео», «Музыка», «Документы» и «Приложения».
Он также позволяет просматривать системные файлы на устройствах с root-доступом и для удобства включает встроенное средство просмотра изображений, музыкальный проигрыватель и текстовый редактор.
Solid Explorer также предлагает массу разнообразных параметров настройки, включая настраиваемые темы и наборы значков. Solid Explorer также может управлять файлами на вашем Chromebook с поддержкой ввода с помощью мыши и клавиатуры.
3. Total Commander
Total Commander, первоначально запущенный в 1993 году в Windows 3.1 как Windows Commander, по праву считается одним из лучших приложений для управления файлами на Android. Он не только позволяет вам просматривать файлы и папки на вашем устройстве, но также копировать или перемещать целые подкаталоги.
Приложение поддерживает перетаскивание, переименование на месте, создание каталогов, удаление файлов, архивирование файлов и множество других функций. Он также поддерживает различные протоколы обмена файлами (FTP, SFTP, WebDAV, LAN, OBEX) и облачное хранилище через плагины.
Другие ключевые функции включают медиаплеер, историю каталогов, возможность изменять права доступа к файлу и многое другое.
Одной из лучших особенностей приложения является то, что оно почти не содержит рекламы, за исключением подсказки «Добавить плагины». По ссылке вы попадете на домашнюю страницу плагинов, которая содержит платные дополнения, которые значительно расширяют функциональность приложения.
Total Commander также поддерживает корневые функции, позволяя ему писать в системные папки, такие как / system или / data. Приложение предупредит вас перед записью чего-либо в системные папки, если они защищены от записи.
В целом, Total Commander — это обязательное приложение для управления файлами Android для опытных пользователей, особенно если вы ищете мощные функции без перегрузки ресурсов.
4. Astro File Manager
Он помогает упорядочивать, перемещать и создавать резервные копии файлов в облаке, а также очищать память телефона Android для повышения его производительности.
Одно из самых эстетичных приложений для управления файлами, оно имеет удобный пользовательский интерфейс для удобной навигации. Он также предлагает простое управление папками для внутреннего, внешнего и облачного хранилища.
Наряду с обычными функциями управления файлами Astro позволяет сжимать файлы в формат ZIP. Он также поддерживает популярные сервисы облачного хранения (Box, Google Drive, Dropbox, OneDrive, Yandex Cloud и т. д.)
И позволяет с легкостью обмениваться файлами и синхронизировать их между собой. Помимо управления локальным и облачным хранилищем, Astro также позволяет создавать резервные копии приложений на SD-картах и с легкостью восстанавливать все ваши приложения после сброса настроек до заводских.
Astro File Manager, разработанный известной компанией App Annie, занимающейся мобильными данными и аналитикой, является бесплатным и не содержит рекламы.
5. Файловый менеджер X-Plore
X-Plore File Manager — еще одно из лучших приложений для управления файлами на Android. Он предлагает двухпанельное древовидное представление с любыми двумя папками по вашему выбору, отображаемыми одновременно.
Это позволяет легко копировать и вставлять файлы между двумя папками или быстро перемещать файлы из одного места в другое.
Приложение также предлагает множество функций для опытных пользователей, включая поддержку root, встроенный шестнадцатеричный редактор, поддержку USB OTG и многое другое.
X-Plore также предлагает карту дисков, которая позволяет вам видеть, какие файлы занимают больше всего места на вашем устройстве. Он также поставляется с менеджером приложений, который позволяет вам просматривать, запускать, копировать, делиться, удалять и дополнительно исследовать установленные приложения.
Наконец, X-Plore также поддерживает обмен файлами по Wi-Fi и позволяет вам получать доступ к хранилищу вашего телефона с ПК или другого устройства Android.
6. Удивите файловый менеджер.
Бесплатное программное обеспечение с открытым исходным кодом (FOSS), Amaze File Manager — одно из лучших приложений в своем сегменте.
Доступны с легкостью. Более того, вы также можете работать с несколькими вкладками одновременно. В приложении также есть панель навигации и несколько тем с классными значками.
Еще одна интересная функция Amaze File Manager — это встроенный диспетчер приложений, который позволяет открывать, создавать резервные копии или напрямую удалять любое приложение.
Как и многие другие приложения в этом списке, Amaze также предлагает корневой проводник для рутированных устройств. Один странный аспект приложения заключается в том, что оно, по-видимому, все еще находится в стадии бета-тестирования, хотя существует уже много лет.
7. Корневой проводник
Root Explorer — один из лучших файловых менеджеров Android для рутированных устройств. Неудивительно, что он долгое время был фаворитом опытных пользователей. Это также единственное платное приложение в нашем списке с ценой в 3,99 доллара.
Между тем, у приложения также есть бесплатный аналог под названием Explorer. Это типичный файловый менеджер с тем же интерфейсом, что и у платной версии, но без поддержки root. Он будет отлично работать для людей, которым нравится внешний вид Root Explorer и которые хотят что-то подобное для своего некорневого устройства.
8. Проводник FX File Explorer
FX File Explorer имеет пользовательский интерфейс с материальным дизайном и уделяет большое внимание конфиденциальности. Приложение не показывает рекламу и утверждает, что не отслеживает активность пользователей.
Еще одна примечательная функция — это веб-доступ, который позволяет передавать и управлять файлами и мультимедиа из веб-браузера вашего компьютера.
FX также включает несколько встроенных апплетов для редактирования / просмотра, включая текстовый редактор, программу просмотра двоичных файлов (Hex), программу просмотра изображений, медиаплеер и всплывающий аудиоплеер, архиваторы и экстракторы, а также программу-исполнитель сценария Shell.
Премиум-версия FX за 2,99 доллара, называемая FX File Explorer Plus, также поддерживает NFC. Известные функции FX + включают шифрование AES-256 / AES-128 и доступ к компьютерам в сети, включая FTP, SSH FTP, WebDAV и Windows Networking. FX + также может подключаться к облачным сервисам хранения, включая Google Drive, Dropbox, SugarSync, Box, SkyDrive и OwnCloud.
9. Диспетчер файлов RS
Предпоследнее приложение в нашем списке называется RS File Manager, и это бесплатное, быстрое и полнофункциональное приложение для Android.
Он предлагает все традиционные функции файлового менеджера, в том числе множественный выбор, вырезание, копирование, вставку, перемещение, создание, удаление, переименование, поиск, совместное использование, скрытие, архивирование / разархивирование, создание закладок и т. д.
Другие примечательные функции включают доступ к облачному хранилищу. сервисы (Google Drive, Dropbox, OneDrive, Яндекс), поддержка сетевых хранилищ (FTP, FTPS, SFTP, WebDAV), поддержка LAN (SMB 2.0, NAS, NFS, CIFS, FTP, HTTP) и многое другое.
RS File Manager также имеет встроенный менеджер приложений и корневой проводник. Также есть поддержка сжатия и распаковки (ZIP, RAR, 7ZIP, OBB), USB OTG и SD-карты. Вы также можете получить доступ к файлам на вашем телефоне с вашего ПК, при этом варианты обмена включают Bluetooth, электронную почту и многое другое.
10. MiXplorer
Последнее приложение в нашем списке, MiXplorer, является одним из самых тщательно охраняемых секретов среди основных пользователей Android. Разработанный старшим разработчиком XDA Hootan Parsa, это, несомненно, одно из лучших приложений для управления файлами на Android.
Это быстрый, плавный, красивый, надежный и полнофункциональный файловый менеджер с простым и интуитивно понятным пользовательским интерфейсом. Он также полностью бесплатен и не содержит рекламы.
Одной из основных особенностей приложения является неограниченный просмотр с вкладками и двухпанельный интерфейс с поддержкой перетаскивания в альбомном режиме. Он также предлагает все типичные функции файлового менеджера Android, включая копирование, вставку, перемещение и многое другое.
В приложении также используется специальный драйвер USB OTG с поддержкой FAT32 (чтение / запись), exFat (чтение / запись) и NTFS (только чтение).
Другие примечательные особенности MiXplorer включают различные режимы просмотра и параметры сортировки для каждой папки отдельно, а также расширенные функции поиска.
Также есть программа просмотра HTML, которая поддерживает MHT, Markdown, AXml, CHM, MAFF и другие. Он также поддерживает упаковку и распаковку 7z и Zip / Zip64 (разделенное шифрование), TAR, TAR.GZ, TAR.BZ2, GZIP, BZIP2, XZ, WIM, Lizard, LZ4, LZ5 и Zstandard.
MiXplorer также предлагает интеграцию для 19 поставщиков облачных услуг, включая Amazon CloudDrive, Mega, Mail.ru, Dropbox, Box, Yandex, HiDrive, Baidu, Mediafire, IDrive, Hubic, 4Sync, 4Shared и других.
Вы можете получить стандартный APK MiXplorer бесплатно с XDA или MiXplorer Silver (платное приложение) в магазине Google Play. Последний представляет собой набор надстроек MiXplorer и Archiver, SMB2-3, Image, Tagger, Metadata и PDF.
Хотя собственный файловый менеджер на Android может быть достаточно хорош для большинства пользователей, опытным пользователям нужна расширенная функциональность, которую могут предложить только сторонние альтернативы.
Так что вперед, попробуйте приложения из нашего списка и выберите файловый менеджер, который лучше всего соответствует вашим потребностям. Как только вы это сделаете, не забудьте сообщить нам, какой из них вы выбрали и почему, в разделе комментариев ниже.
Хранение данных и файлов
В целом хранение файлов и данных можно условно разделить на две группы: во внутреннем или внешнем хранилище. Но разница между ними довольна тонка. В целом политика Гугла в отношение данных ужесточается с каждой версии системы.
Android поддерживает различные варианты хранения данных и файлов.
В зависимости от ваших потребностей, нужно выбрать нужный вариант хранения данных.
Следует быть осторожным при работе с внутренним и внешним хранилищем. Внутренне хранилище всегда есть в системе, но оно может быть не слишком большим по объёму. Вдобавок к внутреннему хранилищу, устройство может иметь внешнее хранилище. В старых моделях таким хранилищем выступала съёмная SD-карта. Сейчас чаще используют встроенную и недоступную для извлечения флеш-память. Если ваше приложение слишком большое, можно попросить систему устанавливать программу во внешнее хранилище, указав просьбу в манифесте.
В разных версиях Android требования к разрешению для работы с внешним хранилищем постоянно менялись. На данный момент (Android 10, API 29) требования выглядят следующим образом.
Приложение может иметь доступ к собственным файлам, которые находятся во внешнем хранилище. Также может получить доступ к определённым общим файлам на внешнем хранилище.
Доступ к общим файлам достигается через FileProvider API или контент-провайдеры.
Для просмотра файлов через студию используйте инструмент Device File Explorer.
Внешняя карта памяти
Попробуем немного разобраться с этим зоопарком. Но помните, что процесс путаницы продолжается.
При подготовке материала я опирался на письма некоторых читателей сайта, которые присылали свои мысли по этому поводу. Спасибо им за структуризацию материала.
Вот что я (кажется) понял, попытавшись загрузить картинку с внешней SD карточки.
External это не External
«EXTERNAL_STORAGE» называется так не потому, что это внешняя память по отношению к устройству, а потому что она выглядит как внешняя память для компьютера, если устройство подключить кабелем к компьютеру. Причём именно выглядит, потому что обмен идёт по протоколу MTP – устройство только показывает компьютеру список папок и файлов, а при необходимости открыть или скопировать файл он специально загружается на компьютер, в отличие от настоящей флешки, файлы которой становятся файлами в файловой системе самого компьютера. Обмен по MTP позволяет устройству продолжать работать, когда оно подключено к компьютеру.
Emulated это не Emulated
Сначала я пытался прочесть файл с карточки на эмуляторе (из этого так ничего и не вышло). Функция getExternalStorageDirectory() давала мне /storage/emulated/0, и я думал, что «emulated» – это потому что на эмуляторе. Но когда я подцепил реальный планшет, слово «emulated» никуда не исчезло. Я стал рыться в интернете и обнаружил, что «Emulated storage is provided by exposing a portion of internal storage through an emulation layer and has been available since Android 3.0.» – то есть это просто кусок внутренней памяти, которая путём какой-то эмуляции делается доступной для пользователя, в отличие от собственно внутренней памяти.
При этом с точки зрения системы доступная для пользователя папка называется /storage/emulated/0, а при подключении к компьютеру по USB это просто одна из двух главных папок устройства – у меня в Windows Explorer она называется Tablet. Вторая папка у меня называется Card, и это и есть настоящая внешняя карточка.
Оказалось, что несистемным приложениям в принципе запрещено напрямую обращаться к съёмной карточке! Похоже, что это было так всегда, но вот начиная с версии Android 6 Marshmallow написано: внешняя карточка может быть определена как Portable либо Adoptable. Adoptable – это как бы «усыновляемая» память которая может быть «adopted», то есть взята в систему (примерно как кот с улицы в дом – это тоже называется to adopt) и использована как внутренняя. Для этого ее надо особым образом отформатировать и не вынимать, иначе не факт, что система продолжит нормально работать.
Portable – это нормальная съёмная карточка, но несистемным приложениям запрещено обращаться из программ к файлам на ней! Вот что написано в https://source.android.com/devices/storage/traditional.html:
Android 6.0 supports portable storage devices which are only connected to the device for a short period of time, like USB flash drives. When a user inserts a new portable device, the platform shows a notification to let them copy or manage the contents of that device. In Android 6.0, any device that is not adopted is considered portable. Because portable storage is connected for only a short time, the platform avoids heavy operations such as media scanning. Third-party apps must go through the Storage Access Framework to interact with files on portable storage; direct access is explicitly blocked for privacy and security reasons.
Если я правильно понял, этот самый Storage Access Framework позволяет работать с документом на карточке через диалог (открыть файл/сохранить файл), а вот прочитать или записать файл на карточке непосредственно из программы невозможно.
Общий вывод – реально из программы можно работать только с файлами на предоставляемой пользователю части встроенной памяти устройства, а на съёмной карточке – нет.
Состояние на текущий момент
Гугл утверждает, что с версии Android 10 Q стандартный доступ к файлам будет прекращён. Ещё в Android 4.4 появился Storage Access Framework, который и должен стать заменой для работы с файлами.
Методы Environment.getExternalStorageDirectory() и Environment.getExternalStoragePublicDirectory() признаны устаревшими и будут недоступны. Даже если они будут возвращать корректные значения, ими вы не сможете воспользоваться.
В Android 7.0 добавили исключение FileUriExposedException, чтобы разработчики перестали использовать схему file://Uri.
Можно создавать файлы в корневой папке карточки при помощи Environment.getExternalStorageDirectory(), а также папки с вложенными файлами. Если папка уже существует, то у вас не будет доступа на запись (если это не ваша папка).
Если вы что-то записали, то сможете и прочитать. Чужое читать нельзя.
Кстати, разрешения на чтение и запись файлов не требуются, а READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE объявлены устаревшими.
Другие приложения не могут получить доступ к файлам вашего приложения. Файлы, которые вы создали через getExternalFilesDir(), доступны через Storage Access Framework, кроме файлов, созданных в корне карточки (что-то я совсем запутался). Ещё можно дать доступ через FileProvider.
При подключении USB-кабеля через getExternalFilesDir(), вы можете увидеть свои файлы и папки, а также файлы и папки пользователя. При этом файлы и папки пользователя на корневой папке вы не увидите. Вам не поможет даже adb или Device File Explorer студии.
Что делать?
Пользуйтесь методами класса Context, типа getExternalFilesDir(), getExternalCacheDir(), getExternalMediaDirs(), getObbDir() и им подобными, чтобы найти место для записи.
Используйте Storage Access Framework.
Используйте MediaStore для мультимедийных файлов.
Используйте FileProvider, чтобы файлы были видимы другим приложениям через ACTION_VIEW/ACTION_SEND.
Android 10: Появился новый флаг android:allowExternalStorageSandbox=»false» и метод Environment.isExternalStorageSandboxed() для работы с песочницей. Флаг android:requestLegacyExternalStorage=»true» для приложений, которые ещё используют старую модель доступа к файлам.
Как временное решение можно добавить в блок манифеста application атрибут android:requestLegacyExternalStorage=»true», чтобы доступ к файлам был как раньше в Android 4.4-9.0.
Android 11
Если вы создаёте файловый менеджер, то ему нужны возможности для просмотра файлов. Для этого следует установить разрешение MANAGE_EXTERNAL_STORAGE или использовать атрибут android:requestLegacyExternalStorage=»true» (см. выше).