Я пытаюсь обновить свой targetSdkVersion
до 30. Менеджер загрузки в устаревшем коде ожидает объект File
и создает файл по пути к файлу. Я создавал файл, используя такой синтаксис: File("${Environment.getExternalStorageDirectory()}/$directoryPath")
.
С момента появления Scoped Storage
я больше не могу этого делать.
Согласно официальному документу:
- Я могу создать файл в каталоге своего приложения.
- Или я могу добавить файл в
Shared Storage
(это предпочтительный вариант использования для меня)
Метод 2 предлагает использовать Storage Access Framework
. Но для этого мне придется заменить диспетчер загрузок. И это будет огромная задача, и для рефакторинга это будет много.
Однако я наткнулся на этот ответ на SO, в котором предлагается использовать File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()+File.separator+directoryPath)
и, как ни странно, он работает как на Android 10, так и на 11.
Хотите знать, как это работает, хотя оно устарело, и правильно ли это?
is it the right way of doing things?
Я так думаю. Вместо общедоступного каталога загрузок вы также можете использовать общедоступный каталог документов. И другие. - person blackapps   schedule 24.06.2021