You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android选择PDF后跳转阅读器打开报ActivityNotFoundException如何解决

修复方案

核心问题点

  • MIME类型配置错误:打开PDF的Intent中错误使用了document/pdf,PDF文件对应的标准MIME类型为application/pdf
  • 缺少URI读取授权:通过ACTION_OPEN_DOCUMENT获取的是ContentProvider格式的URI,未给目标PDF阅读器授予读取权限,第三方应用无法访问该URI
  • 无Intent可用性校验:未判断设备上是否存在可处理PDF打开请求的应用,直接调用startActivity会直接抛出异常
  • (可选)安卓11+包可见性限制:targetSdkVersion≥30时,默认无法扫描到设备上的第三方PDF应用,需要额外配置清单声明

修复后的代码

1. onActivityResult逻辑修改

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

    if (resultCode == Activity.RESULT_OK && requestCode == R.integer.request_code_pdf) {
        data?.data?.also { uri ->
            val openPdfIntent = Intent(Intent.ACTION_VIEW)
            // 修正为正确的PDF MIME类型
            openPdfIntent.setDataAndType(uri, "application/pdf")
            // 给目标应用授予URI读取权限
            openPdfIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            openPdfIntent.flags = Intent.FLAG_ACTIVITY_NO_HISTORY
            
            // 先校验是否有应用可处理该请求,避免崩溃
            if (openPdfIntent.resolveActivity(packageManager) != null) {
                startActivity(openPdfIntent)
            } else {
                Toast.makeText(this, "请先安装PDF阅读器应用", Toast.LENGTH_SHORT).show()
            }
        }
        // 如需支持多选PDF,可补充以下逻辑
        /*
        data?.clipData?.let { clipData ->
            for (i in 0 until clipData.itemCount) {
                val pdfUri = clipData.getItemAt(i).uri
                // 逐个处理选中的PDF文件
            }
        }
        */
    }
}

2. 安卓11+额外配置

如果你的项目targetSdkVersion ≥ 30,需要在AndroidManifest.xml的根节点下添加包可见性声明:

<queries>
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:mimeType="application/pdf" />
    </intent>
</queries>

补充说明

你打印的content://com.android.providers.downloads.documents/document/msf%3A462052格式URI是正常的,ACTION_OPEN_DOCUMENT返回的是系统文档Provider提供的安全URI,不需要转换为本地文件路径,按上述方案配置后第三方应用可以正常访问。

内容的提问来源于stack exchange,提问作者Gasgano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 08:42:03