【问题标题】:Choose a pdf from storage and open it with a pdf app从存储中选择一个 pdf 并使用 pdf 应用程序打开它
【发布时间】:2021-10-07 03:32:09
【问题描述】:

我喜欢从存储中选择一个 pdf 文件。之后,它应该使用用户选择的 pdf 阅读器应用程序打开选择的 pdf 文件。我可以选择一个文件,但之后应用程序崩溃并抛出:

android.content.ActivityNotFoundException: No Activity found to handle Intent

我试过了:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main_menu)

    btnTravels.setOnClickListener {
        val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
        //val intent = Intent(Intent.ACTION_GET_CONTENT)
        intent.type = "application/pdf"
        intent.addCategory(Intent.CATEGORY_OPENABLE)
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
        startActivityForResult(intent, R.integer.request_code_pdf)
    }
}

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

    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == R.integer.request_code_pdf) {
            if (data != null) {

                Log.i("gotresult", data.data.toString())

                data.data?.also {uri ->
                    val intent = Intent(Intent.ACTION_VIEW)
                    intent.setDataAndType(uri,"document/pdf")
                    intent.flags = Intent.FLAG_ACTIVITY_NO_HISTORY
                    startActivity(intent)
                }
            }
        }
    }
}

Log.i 向我展示了这一点。它看起来不像是文件名:

content://com.android.providers.downloads.documents/document/msf%3A462052

【问题讨论】:

    标签: android kotlin pdf android-intent


    【解决方案1】:

    替换:

                    val intent = Intent(Intent.ACTION_VIEW)
                    intent.setDataAndType(uri,"document/pdf")
                    intent.flags = Intent.FLAG_ACTIVITY_NO_HISTORY
                    startActivity(intent)
    

    与:

                    val intent = Intent(Intent.ACTION_VIEW, uri)
                    intent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
                    startActivity(intent)
    

    document/pdf 不是有效的 MIME 类型,您需要授予查看器应用读取内容的权限。

    另外,删除intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true),因为您没有处理多个文档。

    它看起来不像是文件名

    它不应该是一个文件名。它应该是一个Uri 指向用户通过ACTION_OPEN_DOCUMENT 选择的文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多