从 Android Q 的内容 uri 打开 pdf 查看器

Open pdf viewer from content uri at Android Q

我使用此代码存储 pdf 文件:

val intent = Intent().apply {
            action = Intent.ACTION_CREATE_DOCUMENT
            addCategory(Intent.CATEGORY_OPENABLE)
            type = "application/pdf"
            putExtra(Intent.EXTRA_TITLE, file.name)
        }
startActivityForResult(intent, SAVE_FILE_REQUEST_CODE)

在 onActivityResult 之后我使用 OutputStream 保存数据。文件的 URI 可能如下所示:

content://com.android.providers.downloads.documents/document/4594
or
content://com.google.android.apps.docs.storage/document/documentId

但是当我尝试以此意图启动 activity 时,pdf 查看器应用程序显示错误:

 val openFileIntent = Intent(Intent.ACTION_VIEW, contentUri)
                            .apply {
                                setDataAndType(contentUri, "application/pdf")
                                addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
                            }

是否可以从内容 Uri 打开 pdf 查看器activity?

我可以确认评论有答案: and

val target = Intent(Intent.ACTION_VIEW)
target.setDataAndType(uri, "application/pdf")
target.flags = Intent.FLAG_ACTIVITY_NO_HISTORY or Intent.FLAG_GRANT_READ_URI_PERMISSION

val intent: Intent = Intent.createChooser(target, "Open File")

try {
     startActivity(intent)
} catch (e: ActivityNotFoundException) {
     // Instruct the user to install a PDF reader here
}

将“或 Intent.FLAG_GRANT_READ_URI_PERMISSION”添加到标志中使我的 PDF reader 能够使用 content:// Uri 结构正确打开文件。