Сохранение файла в Downloads Android

Задача — создать файл в каталоге Downloads из вашего приложения на платформе Android.

Пусть это будет какой то текстовый файл, который наше приложение умеет генерировать. Формат файла — XML.

Наша задача решается по-разному для андроидов 10+ и андроидов 9-. Потому скелет кода будет выглядеть следующим образом (в контексте вашего activity):

Далее рассмотрим оба кейса.

Сценарий для Android 6 — 9

Здесь используется специальный механизм получения разрешения на запись. В нашем случае это WRITE_EXTERNAL_STORAGE. Если разрешение уже выдано при установке программы или в ходе её работы, то проверка проходит успешно. В противном случае запускается диалог, где разрешение запрашивается у пользователя.

В этот диалог, в том числе, отправляется ваш маркер, по которому вы потом сможете различить этот запрос среди прочих. У меня для этого служит константа XMLWRITEFILE.

Ваше activity должно реализовать callback метод onRequestPermissionsResult, который получает ответ пользователя из описанного выше диалога.

В обработчике ответа мы, при получении требуемых прав, запускаем экспорт данных. Иначе выводим сообщение, что создание файла не возможно.

В манифесте приложения, также потребуется внести некоторые изменения.

Нам важен здесь тег — uses-permission и дополнительный атрибут в теге application.

Создание и запись файла в Downloads под Android 9 и ниже

Все разрешения получены, теперь можно рассмотреть как создать файл в папке Downloads.

Довольно простой кейс — вы создаёте файл в DIRECTORY_DOWNLOADS, и пишите туда нужное вам содержимое.

Создание и запись файла в Downloads под Android 10 и выше

Здесь поток записи в файл получается через регистрацию нашего файла в медиа хранилище. Сначала нужно подготовить описание файла, это объект типа ContentValues.

На основе описания, медиа хранилище регистрирует файл и подготавливает вам Uri дескриптор. Остаётся только произвести запись данных.

Если resolver.insert возвращает null

Из документации не очень понятно как обработать такое событие. У меня эта ситуация возникала, когда я удалял ранее созданные файлы и снова пытался произвести экспорт. В итоге, это удалось решить генерацией файла с уникальным именем

Т.е. я добавил дату-время в имя файла.

По всей видимости, реестр не хотел добавлять файлы с ранее существовавшими именами. Как этого избежать, мне пока не ясно, если у вас есть решение — поделитесь в комментах.

Написать комментарий

Мало букафф? Читайте есчо !

Анимированный градиент в ActionBar

Октябрь 23, 2022 г.

Расскажу как создать фон для actionbar с анимацией градиента цвета. Нам понадобится Android Studio и Kotlin. Для начала добавим drawable ресурс в наш проект. Откроем в проекте вкладку res/drawable и выберем из меню File -> New -> Drawable ...

Читать

Перебор изображений R.drawable

Ноябрь 21, 2022 г.

Рассмотрим как организовать перебор коллекции ресурсов в Kotlin на примере R.drawable. Типичная задача заключается в том, чтобы отфильтровать элементы коллекции по имени и вернуть список целочисленных идентификаторов, соответствующих вашим критериям. ...

Читать

 

Комментарии к «Сохранение файла в Downloads Android»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: