Можно ли программно получить доступ к папке загрузки на Android Q (SDK> = 29)? - PullRequest
3 голосов
/ 26 февраля 2020

Я хочу перечислить все файлы .txt в папке Загрузка , а затем разрешить пользователю выбрать один и прочитать его содержимое. Мой minSdkVersion - 16, но я столкнулся с этой проблемой, потому что мой Android - это Q (29).

Что я пробовал:

Видимо Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) решит это для SDK <= 29. Однако я не тестировал его, потому что сначала хотел бы найти решение для Android Q. </p>

getExternalStoragePublicDirectory говорит:

Когда приложение нацелено на Build.VERSION_CODES.Q, путь, возвращаемый этим методом, больше не доступен напрямую для приложений. Приложения могут продолжать получать доступ к содержимому, хранящемуся в общем / внешнем хранилище, путем перехода на другие альтернативы, такие как Context # getExternalFilesDir (String) , MediaStore или Intent # ACTION_OPEN_DOCUMENT .

Итак:

  • getExternalFilesDir возвращает /storage/emulated/0/Android/data/com.mypackage/files/Download. Этот путь бесполезен, я ожидал, что он вернет /storage/emulated/0/Download, где находятся загруженные файлы.

  • Мне не удалось что-то сделать с MediaStore.Downloads. Я проверил документацию и там написано: «В частности, если ваше приложение хочет получить доступ к файлу в коллекции MediaStore.Downloads, который ваше приложение не создавало, вы должны использовать Storage Access Framework». Итак, я предполагаю, что это не сработает для меня.

  • В моей концепции Intent и Storage Access Framework потребовалось бы пользователю перемещаться по каталогам и файлам с помощью файлового менеджера, это не то, что я хочу здесь.

Вкратце:

Можно ли программно перечислить .txt загруженных файлов программно в Android Q (SDK> = 29)? Если да, то как?

1 Ответ

1 голос
/ 26 февраля 2020

Можно ли программно перечислить загруженные файлы .txt в Android Q (SDK> = 29)?

Не созданные другими приложениями, которые могут показаться ваше намерение.

Самое близкое, если вы используете ACTION_OPEN_DOCUMENT_TREE и просите пользователя открыть дерево Downloads/ на внешнем хранилище ... а вы не можете сделать это на Android R (по крайней мере, через DP1 ).

...