Вот как я это попробовал:
Код: Выделить всё
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
m_OpenDocumentTreeLauncher.launch(intent)
Код: Выделить всё
val childrenUri = DocumentsContract.buildChildDocumentsUriUsingTree(rootUri, DocumentsContract.getTreeDocumentId(rootUri))
val contentResolver = requireContext().contentResolver
val projection = arrayOf(
DocumentsContract.Document.COLUMN_DOCUMENT_ID,
DocumentsContract.Document.COLUMN_DISPLAY_NAME,
DocumentsContract.Document.COLUMN_SIZE,
DocumentsContract.Document.COLUMN_MIME_TYPE,
)
val cursor = contentResolver.query(childrenUri, projection, null, null, null)
if (cursor != null)
{
try
{
while (cursor.moveToNext())
{
val docId = cursor.getString(0)
val name = cursor.getString(1)
val size = cursor.getLong(2)
val mimeType = cursor.getString(3)
fileList.add(rootUri.authority.toString(), docId, name, size, mimeType)
}
}
finally {
cursor.close()
}
}
docId — это идентификатор выбранного файла.
И загружаем этот файл примерно так:
Код: Выделить всё
val documentUri = DocumentsContract.buildDocumentUri(fileList.authority, fileList.docId)
val contentResolver = requireContext().contentResolver
val inputStream = contentResolver.openInputStream(documentUri)
content://com.android.externalstorage.documents/document/9C35-6BCD%3ATest%2FTestFile.txt
Пока все хорошо. Теперь, когда я пытаюсь щелкнуть этот файл, чтобы загрузить его содержимое в FileStream, я сталкиваюсь с проблемой. Я постоянно получаю сообщение об ошибке:
"Отказ в разрешении: чтение com.android.externalstorage.ExternalStorageProvider uri content://com.android.externalstorage.documents/document/9C35-6BCD%3ATest% 2FTestFile.txt из pid=22147, uid=10488 требует, чтобы вы получили доступ с помощью ACTION_OPEN_DOCUMENT или связанных API"
Я предполагал, что у меня будет доступ к файлам в этом каталоге, выбранным пользователем через «ACTION_OPEN_DOCUMENT_TREE». Разве это не так? Как я могу открыть/прочитать файл в этой папке, не прибегая к «ACTION_OPEN_DOCUMENT»? Я предпочитаю использовать внутренний браузер из-за его простоты и скорости, а также из-за лучшего взаимодействия с пользователем. Эта функция больше невозможна или есть альтернативный подход? Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/782 ... al-browser