Хранилище Android: создание документа в общем хранилище

Я пытаюсь обновить свой targetSdkVersion до 30. Менеджер загрузки в устаревшем коде ожидает объект File и создает файл по пути к файлу. Я создавал файл, используя такой синтаксис: File("${Environment.getExternalStorageDirectory()}/$directoryPath").

С момента появления Scoped Storage я больше не могу этого делать.

Согласно официальному документу:

  1. Я могу создать файл в каталоге своего приложения.
  2. Или я могу добавить файл в Shared Storage (это предпочтительный вариант использования для меня)

Метод 2 предлагает использовать Storage Access Framework. Но для этого мне придется заменить диспетчер загрузок. И это будет огромная задача, и для рефакторинга это будет много.

Однако я наткнулся на этот ответ на SO, в котором предлагается использовать File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()+File.separator+directoryPath) и, как ни странно, он работает как на Android 10, так и на 11.

Хотите знать, как это работает, хотя оно устарело, и правильно ли это?


person ankuranurag2    schedule 24.06.2021    source источник
comment
Я думаю, что если вы выберете устаревшую вещь, когда-нибудь в не столь отдаленном будущем Google выпустит одну из них до 3 ноября, вы должны обновить обработку файлов, иначе вы не сможете обновить свое приложение. Так что, возможно, вам это сойдет с рук на год или около того (я просто предполагаю на данный момент).   -  person Razvan S.    schedule 24.06.2021
comment
is it the right way of doing things? Я так думаю. Вместо общедоступного каталога загрузок вы также можете использовать общедоступный каталог документов. И другие.   -  person blackapps    schedule 24.06.2021
comment
youtu.be/idsUMiWjfnM   -  person Sam Chen    schedule 24.06.2021