java - Android 打开 pdf 不工作

标签 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();
    }

编辑:它总是抛出 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 }

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

最佳答案

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

为了尽可能通用,您应该首先将要从 Assets /资源中读取的任何 PDF 文件复制到文件系统(内部或外部存储,只要创建的文件是外部可读的,就没有区别).然后将带有 URI 的 Intent 传递给文件实例,总体上你应该会好得多。

快速测试表明,Aldiko 仅响应带有 file:// URI 和“application/pdf”mimeType 的 Intent,甚至 Adob​​e Reader 都不会解析其他选项。 .所以这是你的赢家。

HTH

关于java - Android 打开 pdf 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8055859/

相关文章:

java - JQPL : Create new Object within the Query from multiple tables

java - 使用 AmazonS3Client.java api 将文件上传到 S3

java - 当 JFrame 包含 GridLayout 时,我可以为 JFrame 设置特定的边框大小吗?

java - 如何在 recyclerview 中添加聊天日期?

android - Phonegap Android InAppBrowser 无法正常工作

java - 从非 Gmail 帐户以编程方式发送电子邮件时出错

java - 有人可以帮助我让缓冲阅读器在 Java 中工作吗?

Java JFrame很奇怪

java - 如何等待 Retrofit 异步 Web 服务调用? (调用.入队)

android - 元素类型 'List<widget>' 不能分配给列表类型 'Widget'