Я прочитал, что должен заранее подготовить свое приложение к выпуску Android Q, потому что тогда общий доступ на чтение / запись к файлам вне каталогов, принадлежащих приложению, может быть признан устаревшим, если они не откажутся от нового способа управления этими файлами.
К счастью, у меня не так много строк кода, которые нужно изменить.
Дело в том, что в Storage Access Framework, похоже, есть некоторые проблемы.И именно здесь от Киткат, я вижу (я этого не знал).В противном случае мой код неверен.
Я не могу просто заставить пользователя выбрать папку в облачном хранилище, чтобы получить Uri взамен, для дальнейшего заполнения этой папки.
Когда яиспользуйте пример кода, найденный по адресу
https://github.com/android/storage/tree/228c8e0aa19586bfcf36318ddb191719537a45a4/ActionOpenDocumentTree#action_open_document_tree
, и поместите его в приложение для базовых действий (пример приложения по умолчанию, созданного в среде IDE), так что пользователь не может выбрать облачное хранилищекорень, но только места на диске.Это в Kotlin, но я перевел это на Java, не изменяя это.Разве это не проблема Java, потому что я попробовал также версию Kotlin.
[Я написал другой код с некоторыми взломами, которые по крайней мере привели к возвращению облачной папки Uri в метод onActivityResult.Он включает в себя использование другого намеренного действия, но он все еще не служит моим целям, промежуточному программному обеспечению это не нравится, поэтому он нарушает Storage Access Framework - не удается получить дерево документов из uri (возвращено из приложения Drive) ]
В обоих случаях у меня одинаковые пути:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="filesPath" path="/"/>
<external-path name="externalPath" path="/"/>
<external-files-path name="externalFilesPath" path="/"/>
</paths>
Как заставить пользователя выбрать папку в облачном провайдере и как получить URI?