Android 打开 pdf 不起作用

xdu*_*ine 5 java android

一段时间以来,我一直在努力让它发挥作用。我在这里看到了关于如何从 Android 打开 pdf 的其他问题,普遍的共识是我下面的代码。我错过了什么吗?

    try
    {
        Uri path = Uri.parse("android.resource://com.TeamGLaDOS.DayTradeSim/" + R.raw.teamdoc);
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(path, "application/pdf");
        this.startActivity(intent);
    }
    catch(ActivityNotFoundException e)
    {
        Toast.makeText(this, "No Application Available to view PDF",     Toast.LENGTH_SHORT).show();
    }
Run Code Online (Sandbox Code Playgroud)

编辑:它总是抛出 ActivityNotFoundException 并显示 Toast。

异常消息是这样的:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=android.resource://com.TeamGLaDOS.DayTradeSim/2130968576 typ=application/pdf }
Run Code Online (Sandbox Code Playgroud)

编辑 2:我安装了一个 pdf 应用程序(Aldiko),之前我使用其他应用程序在 Aldiko 中启动 pdf。

Dev*_*red 2

您的 URI 被适当地构造为通过 ID 访问原始资源,但这并不意味着所有 PDF 阅读器都会使用android.resource://数据 URI 方案解析意图。它在一定程度上取决于用户设备上安装的 PDF 阅读器应用程序的实现,但许多检查不仅仅是您意图中设置的 mimeType。例如,Adobe Reader 将解析任何具有file://URI、content://URI 或根本没有 URI(仅 mimeType)的 Intent,但不会解析直接指向资源的 URI。

为了尽可能通用,您应该首先将要从资产/资源中读取的任何 PDF 文件复制到文件系统(内部或外部存储,只要文件创建为外部可读即可)。然后将带有 URI 的意图传递给文件实例,总体来说您应该会运气好得多。

快速测试表明,Aldiko 仅响应具有file://URI 和“application/pdf”mimeType 的 Intent,甚至 Adob​​e Reader 也无法解决其他任何选项……所以这就是您的赢家。

华泰