#android #android-10.0
#Android #android-10.0
Вопрос:
Если я правильно понимаю, в Android Q ваше приложение может читать / записывать в каталог загрузок как на несъемном хранилище, так и с помощью api:
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
что переводится как
/storage/emulated/0/Downloads
Или каталог общедоступных загрузок на съемном носителе (новый в Android Q), т. е.
/storage/08E7-324HI/Downloads
Как мне получить этот второй каталог с помощью API?
Комментарии:
1. действительно? я могу читать / записывать в каталог загрузок в эмуляторе.
Ответ №1:
На самом деле Environment.getExternalStorageDirectory() и Environment. Методы getExternalStoragePublicDirectory (строковый тип) устарели, и их вызов на устройстве Android Q (или более поздней версии) вернет нулевой файловый объект.
Как вы можете видеть в таблице ниже (взято из документации разработчиков Android здесь), лучший способ получить доступ к каталогу «Загрузки» — это использовать платформу доступа к хранилищу:
Открытие файла с помощью платформы доступа к хранилищу — это двухэтапный процесс.
Во-первых, запустите намерение запустить средство выбора файлов системы следующим образом:
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.type = "*/*"
startActivityForResult(intent, OPEN_DOCUMENT_REQUEST_CODE)
Во-вторых, прислушайтесь к результату в onActivityResult вашей активности (requestCode: Int, resultCode: Int, data: Intent?)метод следующим образом:
if (requestCode == OPEN_DOCUMENT_REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
val uri = data?.data
if (uri == null) {
showAlertDialog("Error", "Got back a null URI")
return
}
val inputStream = contentResolver.openInputStream(uri)
if (inputStream == null) {
showAlertDialog("Error", "Failed reading the contents of the selected file")
return
}
// TODO: read the input stream as makes sense in your application
} else {
showToast("No file selected")
}
}
Вы можете обратиться к руководству разработчика Storage Access Framework, чтобы аналогичным образом узнать, как создать, отредактировать или удалить файл.