从存储中选择一个 pdf 并使用 pdf 应用程序打开它
Posted
技术标签:
【中文标题】从存储中选择一个 pdf 并使用 pdf 应用程序打开它【英文标题】:Choose a pdf from storage and open it with a pdf app 【发布时间】: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
【问题讨论】:
【参考方案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
选择的文档。
【讨论】:
以上是关于从存储中选择一个 pdf 并使用 pdf 应用程序打开它的主要内容,如果未能解决你的问题,请参考以下文章
Android 从 URL 下载 PDF,然后使用 PDF 阅读器打开它