【问题标题】:Android PDF viewer app to be invoked要调用的 Android PDF 查看器应用程序
【发布时间】:2011-08-04 20:19:37
【问题描述】:

我需要一个指向(最好是免费的)PDF 查看器应用程序的指针,我可以通过 Intent 上的 startActivity 在文件或 URL 链接上调用它。我知道没有真正的标准 - 我有一部带有 OpenOffice 的手机可以读取本地 PDF 文件,还有一部没有内置 PDF 阅读器的手机。

我想要的是一个应用程序的名称,我可以建议我的用户从市场上下载它,它是一个 PDF 查看器,我可以通过配置 Intent 并调用 startActivity 来调用它。当我截获一个指向 pdf 文件的 URL 并发现该应用程序尚未安装时,我会提出这个建议。虽然丑陋,但这比他们现在得到的空白屏幕要好,因为内置浏览器不支持 PDF。

我已经安装了 Adob​​e 的 PDF 查看器,但它没有显示在包管理器中作为处理 PDF 文件的候选者。

我已使用SO:how-to-render-pdf-in-android 中建议的技术来检查基于 URL 的 PDF 链接和本地文件 PDF 链接的候选活动,并看到 com.android.browser.Browser 始终为 http:// URL 链接调用; "file.pdf" 的 URL 会导致在一部手机上选择 OpenOffice,而在另一部手机上不选择任何内容。 Adobe 的 PDF 查看器不适合这两种方法。

我尝试了 Google Docs viewer 方法(如SO:android-load-pdf-pdf-viewer 中所建议的那样,但这还有很多不足之处,尤其是当我尝试加载的 PDF 图像在设备屏幕上越来越远,直到用户需要滚动几屏空白屏幕以到达文档。

我认为像 android-pdf-viewer 这样的库是一种潜在的解决方案。但我更愿意链接到另一个应用程序,而不是在我的应用程序中内置 PDF 支持(包括字体等)。然后,这允许我的应用程序支持多个 PDF 查看器应用程序 - 选择用户已经安装的一个,或者如果我需要它时没有兼容的阅读器,则建议我最喜欢的一个。我可能会看到使用这些类型的库来创建这样的应用程序并将其加载到市场,但在此之前我想确保我没有重新发明轮子。

我发现droid-reader 应用程序看起来很有希望,但市场上似乎没有。虽然我个人对将文件下载到我的 sdcard 并从那里安装的操作感到满意,但对于我所针对的普通公众用户来说,这不是一个可行的选择。

【问题讨论】:

  • 什么是 mime 类型?尝试应用程序/pdf
  • 对于本地文件,我将 mime 类型设置为 application/pdf,但如果之前没有安装“注册”为此类的处理程序,这仍然不会返回任何可行的活动文件。 ` webUrl = "文件.pdf";路径 = Uri.parse(webUrl);意图=新意图(意图.ACTION_VIEW);意图.setData(路径); riList = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);意图=新意图(意图.ACTION_VIEW); intent.setDataAndType(路径,“应用程序/pdf”); riList = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); `
  • 没有时间编辑上述评论...在这两种情况下,“riList”都是空的,当设备没有安装默认查看器时,我们没有设置 mime 类型。我正在寻找一个可以推荐的。

标签: android pdf


【解决方案1】:

我希望以下代码片段对您阅读 pdf 有所帮助。它将使用您设备上设置的默认 pdf 查看器。

Intent intent= new Intent(Intent.ACTION_VIEW);
File f = new File("/mnt/sdcard/file.pdf");
intent.setDataAndType(Uri.fromFile(f),"application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
getApplicationContext().startActivity(intent);

【讨论】:

  • 对不起,我应该在我的问题中说得更清楚(它太罗嗦了)...我使用了类似的代码(实际上几乎相同)来调用默认的 PDF 查看器。问题是许多设备没有安装默认的 PDF 查看器。我所追求的是一个指向一个好的/免费的 PDF 查看器的指针,如果他们还没有安装,我可以推荐给我的用户。
  • 还有addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)。见stackoverflow.com/a/59322760/2914140
猜你喜欢
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 2013-05-29
  • 2016-12-24
相关资源
最近更新 更多