我开始一个 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
中,我尝试从 Uri (content//:path
) 创建一份 PDF:
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
为了将页面转换成图像,我需要一个文件。
我如何从MediaStore返回的Uri中获取PDF文件?
ACTION_GET_CONTENT
没有要求返回代表文件系统上的文件的Uri
。请参见 https://dev59.com/0VIH5IYBdhLWcg3wkvtX#59123287 和 https://stackoverflow.com/a/59911702/115145 和 https://dev59.com/C7Tma4cB1Zd3GeqP1Bts#56308643 以获取更多信息。 - CommonsWare