Я запускаю намерение ACTION_GET_CONTENT
, чтобы выбрать PDF:
override fun routeToFilePicker() {
val intent = Intent()
intent.type = MediaType.PDF.toString()
intent.action = Intent.ACTION_GET_CONTENT
activity.startActivityForResult(
Intent.createChooser(intent, "Select PDF"),
REQUEST_CODE_PDF_PICKER
)
}
Затем onActivityResult
я пытаюсь создать PDF-файл из Uri (content//:path
):
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_CODE_PDF_PICKER ) {
data?.data?.let { pdfUri: Uri ->
val pdfFile: File = pdfUri.toFile() <-- chrash
...
}
}
}
pdfUri.toFile()
вызывает фатальное исключение:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1003, result=-1, data=Intent { dat=content://com.android.providers.downloads.documents/document/3569 flg=0x1 }} to activity {my.package.name.activity}: java.lang.IllegalArgumentException: Uri lacks 'file' scheme: content://com.android.providers.downloads.documents/document/3569
Caused by: java.lang.IllegalArgumentException: Uri lacks 'file' scheme: content://com.android.providers.downloads.documents/document/3569
Мне нужен файл, чтобы преобразовать страницы в изображения.
Как я могу получить PDF-файл в виде файла из Uri, возвращенного MediaStore?
ACTION_GET_CONTENT
возвращалUri
, представляющий файл в файловой системе. См. stackoverflow.com/a/59123287/115145 и stackoverflow.com/a/59911702/115145 и stackoverflow.com/a/56308643/115145 а> больше. - person CommonsWare   schedule 23.07.2020MediaStore
. Затем попробуйте использовать значение столбцаDATA
изMediaStore
в качестве пути к файловой системе. Это будет ненадежно, так какMediaStore
имеет доступ к файлам, которых нет у вашего приложения (например, на съемном носителе), и неясно, можно ли будет использовать столбецDATA
в будущем. - person CommonsWare   schedule 24.07.2020