打开下载的 PDF 文件不会触发 ActivityNotFoundException

2024-02-17

我想从某个网址下载 PDF 并且还想触发catch如果未检测到 PDF 查看器,则使用短语。

这是我的代码:

    try {
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(materialPdfUrl)));
    } catch (ActivityNotFoundException e) {
        openDialog(getString(R.string.error),
                getString(R.string.no_pdf_reader));
    }

现在的问题是 ActivityNotFoundException 永远不会被触发,因为即使周围没有 PDF 查看器,它也总是下载 PDF。你建议我怎么做?

EDIT:这是我的旧代码:

Intent pdfIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(materialPdfUrl));
pdfIntent.setType("application/pdf");
pdfIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(pdfIntent);

    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(materialPdfUrl)));

正在开始一个Implicit Intent因此不会抛出ActivityNotFoundException.

如果你读到这篇文章http://developer.android.com/guide/components/intents-filters.html#ccases http://developer.android.com/guide/components/intents-filters.html#ccases

例如,考虑当用户点击网页上的链接时浏览器应用程序会执行什么操作。它首先尝试显示数据(如果链接指向 HTML 页面,则可以这样做)。如果它无法显示数据,它会将隐式意图与方案和数据类型放在一起,并尝试启动可以完成该工作的活动。如果没有接受者,它会要求下载管理器下载数据。这将其置于内容提供商的控制之下,因此可能更大的活动池(带有仅命名数据类型的过滤器的活动池)可以响应。

因此,如果没有找到 PDF 查看器,Android 下载管理器将尝试下载该文件(而不是抛出该异常)。

如果您想查看 pdf 或被告知您无法查看(而不是下载),那么您将需要使用以下命令手动查询系统:PackageManager找出应用程序是否会响应您的意图,而不是只是触发并忘记。


FYI ActivityNotFoundException将被抛出Explicit Intent's就像是:

Intent intent = new Intent();
intent.setComponent(new ComponentName("com.facebook","NewsFeedActivity.java"));
startActivity(intent);```
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

打开下载的 PDF 文件不会触发 ActivityNotFoundException 的相关文章

随机推荐