MIME 类型为 pdf 的 ACTION_VIEW 是否可能找不到可以处理它的应用程序?

Is it possible for ACTION_VIEW with a MIME type of pdf to find no application which could handle it?

我想在应用程序中使用以下代码:

val browserIntent = Intent(Intent.ACTION_VIEW)
browserIntent.setDataAndType(Uri.parse(foo), MIME_PDF)

val chooser = Intent.createChooser(browserIntent, getString(R.string.view_using))
chooser.flags = Intent.FLAG_ACTIVITY_NEW_TASK

startActivity(chooser)

哪里

const val MIME_PDF = "application/pdf"  

格式类似于:

https://example.net/name-of-feature/ThisIsThePdf.pdf

在我自己的设备和模拟器上,这将打开一个用于查看 pdf 的漂亮视图,似乎它加载了一个 google pdf 查看器,它甚至没有打开用于选择应用程序的启动器,这完全没问题,但是,对于某些设备,此请求可能会失败吗?

据我所知,这个意图实际上只是试图打开任何可以查看 pdf 的东西,然后给它提供 pdf 的数据,所以这个意图对 google 没有实际依赖pdf 查看器,相反,它只依赖于拥有浏览器的用户,或者其他任何可以处理安装的 pdf 的东西,对吗?

理论上,只要用户(至少)安装了浏览器,这个 intent 就会一直有效?

永远不要相信用户会有一个能够打开您想要的文件的应用程序。您永远不知道用户在 his/her 设备上安装了哪些应用程序等。 始终检查:

try {
    startActivity(chooser)
} catch (e: ActivityNotFoundException) {
    // Define what your app should do if no activity can handle the intent.
}

最好做好准备而不是让应用程序崩溃。

默认情况下,android 模拟器似乎安装了 pdf 查看器,即 Google Drive,它会自动处理我的意图。如果您将请求包装在 Intent.createChooser 中并且它在设备上找不到任何东西来处理请求,它不会抛出异常,而是只会在设备上显示没有找到匹配的应用程序来处理该意图,参考 - here