【问题标题】:Open pdf viewer from content uri at Android Q在 Android Q 从内容 uri 打开 pdf 查看器
【发布时间】:2020-10-28 16:50:27
【问题描述】:

我使用此代码存储 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

但是当我尝试以此意图启动活动时,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 查看器活动?

【问题讨论】:

  • pdf 查看器显示哪个错误?
  • 你应该设置一个标志 Intent.GRAND_READ_URI (或其他任何名称)。
  • @blackapps,谢谢。标志:Intent.FLAG_GRANT_READ_URI_PERMISSION 已解决问题。

标签: android android-10.0


【解决方案1】:

我可以确认评论有答案:blackappsАндрей Макаренко

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 阅读器使用 content:// Uri 结构正确打开文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 2012-04-08
    • 1970-01-01
    相关资源
    最近更新 更多