Сохранить файл после очистки данных в Android 10

Приложение, над которым я сейчас работаю, требует ручной настройки (ввода некоторой информации) при подготовке устройства. Эта информация должна быть записана в файл, который не следует удалять при удалении приложения или удалении данных приложения (требование поддержки пользователей, поскольку в некоторых случаях они могут указать пользователям сделать это).

Был очень похожий старый вопрос, но ответ теперь устарел, и обновленный ответ не опубликован.

Сохранить файлы после удаления приложения для Android

Итак, вопрос в том, учитывая устаревание Environment.getExternalStorageDirectory() на Android 10, как мы программно запишем/прочитаем файл, который не будет удален при удалении приложения или удалении данных?

Как бы то ни было, мы не можем полагаться на автоматическое резервное копирование приложений, поскольку у пользователей нет настроенных учетных записей Google.

Спасибо


person Robert Estivill    schedule 28.09.2020    source источник
comment
Используйте SAF, чтобы позволить пользователю выбрать подходящий каталог.   -  person blackapps    schedule 28.09.2020
comment
Хотя взаимодействие с пользователем является частью настройки устройства, это необходимо сделать программно, как указано в вопросе.   -  person Robert Estivill    schedule 28.09.2020
comment
Просто запросите устаревшее внешнее хранилище в манифесте, и вы сможете использовать внешнее хранилище как обычно.   -  person blackapps    schedule 28.09.2020
comment
Это неправильно. В документации четко указано: When an app targets Build.VERSION_CODES.Q, the path returned from this method is no longer directly accessible to apps. developer.android.com/reference/android/ ОС/   -  person Robert Estivill    schedule 28.09.2020
comment
Верно. Но повторюсь: если вы запрашиваете устаревшее внешнее хранилище в манифесте, это так.   -  person blackapps    schedule 28.09.2020
comment
Истинный. Это сработает. Я должен был сказать, что уже ориентируюсь на Android 11, в котором requestLegacyStorage, к сожалению, игнорируется. :( developer.android.com/about/versions/11/privacy/storage< /а>   -  person Robert Estivill    schedule 29.09.2020
comment
И да и нет. Это не повлияет на устройства Android 11, но продолжит работать на устройствах Android 10. И вам это не понадобится на устройствах Android 11, так как это больше не ограничивает.   -  person blackapps    schedule 29.09.2020
comment
Хм. Что вы имеете в виду, что Android 11 не такой ограничительный? Я думаю, что да, так как даже устаревший режим запроса не будет работать в Android 11, верно?   -  person Robert Estivill    schedule 29.09.2020
comment
. На устройствах Android 11 каждое приложение может напрямую читать и записывать в такие папки, как «Загрузки», «Документы», «DCIM», «Изображения», «Тревоги», «Фильмы» и т. д. Google сделал шаг назад.   -  person blackapps    schedule 29.09.2020


Ответы (1)


Подводя итог, ориентируясь на 30.

Для устройства Android 10: запросите устаревшее внешнее хранилище, чтобы получить доступ к внешнему хранилищу, как обычно.

И Google делает шаг назад для устройств Android 11: используйте такие каталоги, как «Загрузки», «Изображения», «Фильмы», «Документы», DCIM и так далее. Доступ для чтения и записи для всех. ОС Android очень требовательна к использованию правильных расширений для файлов, создаваемых в этих папках.

person blackapps    schedule 29.09.2020
comment
Можете ли вы указать мне какую-либо ссылку, документацию или образец, подтверждающий это заявление? Кажется, я нахожу больше ограничений только в Android 11 или разных API для выполнения того же самого MediaStore.* - person Robert Estivill; 29.09.2020
comment
Можете ли вы сначала подтвердить, что эти каталоги доступны для записи? Я думаю, вы уже попытались. - person blackapps; 29.09.2020
comment
Извините за задержку, смог попробовать и действительно работает в Android 10 и 11. Я добавил код в ответ. Странно то, что это работало без запроса устаревшего внешнего хранилища. Хотя я с подозрением отношусь к своему тестированию на Android 10, потому что на устройстве установлено какое-то программное обеспечение для управления предприятием, оно полностью работает на Android 9 и 11, которые я тестировал на личных устройствах. - person Robert Estivill; 01.10.2020
comment
Далее ссылки нет, так как это только мои переживания. - person blackapps; 01.10.2020