在 android 10 和 11 中,如何在使用范围存储访问框架时从 URI 获取真实文件路径

问题描述

在 android Q 和 android R 中使用存储访问框架时如何从 URI 获取真实文件路径。我的代码使用系统文件选择器即选择 pdf 文件

 Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
                    type = "application/pdf"
                    addCategory(Intent.CATEGORY_OPENABLE)
                    flags = flags or Intent.FLAG_GRANT_READ_URI_PERMISSION
                    startActivityForResult(intent,OPEN_PDF_REQUEST)
                }

override fun onActivityResult(requestCode: Int,resultCode: Int,data: Intent?) {
        super.onActivityResult(requestCode,resultCode,data)

        if (requestCode == OPEN_PDF_REQUEST && resultCode == RESULT_OK) {
            data?.data?.also { documentUri ->

                //Permission needed if you want to retain access even after reboot
                contentResolver.takePersistableuriPermission(
                    documentUri,Intent.FLAG_GRANT_READ_URI_PERMISSION
                )

                val documentFile = DocumentFile.fromSingleUri(this,documentUri)

                val fileUri = documentFile?.uri
                Log.d("TAG","path = ${fileUri?.path}")

            }
        }
    }

Logcat 输出

URI= content://com.android.providers.media.documents/document/document%3A266

为了在 PdfViewer 中打开文件,我无法从这个 URI 获取真实的文件路径,也无法在 PDFViewer 中打开这个 URI。

现在,如何从该 URI 或任何替代解决方获取真实文件路径,以在 android Q 及更高版本中实现此目标(即在 pdf 查看器中打开 pdf 文件)。

任何帮助将不胜感激:)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)