Я хочу перечислить все файлы .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)? Если да, то как?