【发布时间】:2011-06-21 12:40:38
【问题描述】:
我正在使用一种方法来检测 Android 设备上的 pdf 支持,就像这样
public boolean canDisplayPdf() {
PackageManager packageManager = application.getPackageManager();
Intent testIntent = new Intent(Intent.ACTION_VIEW);
testIntent.setType("application/pdf");
if (packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY).size() > 0) {
return true;
} else {
return false;
}
}
到目前为止,这一直很好。我知道至少 HTC 默认查看器、droidreader 和 adobe acrobat 会以这种方式报告并返回正确的结果。然而,我现在在市场控制台上得到了一个用户的评论,他说他在设备上支持 pdf,但是从应用程序的描述行为我得出结论,这个方法返回 false。
有没有更好的方法来检测对 pdf 的支持?
PS:我希望能够向用户询问有关市场的详细信息。
【问题讨论】:
-
向用户询问市场详情是什么意思?喜欢在安装您的应用程序之前检查他们是否安装了 PDF 阅读器?
-
我无法与用户就有关 Android 市场的评论展开对话。有时能够做到这一点会很棒。在这种情况下,例如很高兴知道安装了什么 pdf 应用程序,因为它有一个错误,即它不会对这个意图做出反应,恕我直言......我可以将此错误报告给所述应用程序的制造商。
-
看起来他们使用的任何 pdf 查看器在处理意图时都没有设置为使用 CATEGORY_DEFAULT。您可以通过使用 0 作为您的标志而不是 PackageManager.MATCH_DEFAULT_ONLY 来解决这个问题,但是如果出于某种原因有应用程序有意在 pdf 上注册 ACTION_VIEW 但不想用于查看它们。这似乎不太可能,但这是一个广阔的世界,所以你永远不会知道。 :) 你正在做的是正确的方法。我同意能够回应用户会很好,否则这些问题会很痛苦。
-
您不应该排除用户声明他的设备支持 PDF 不正确的可能性 :)。
-
仅仅因为有一个 PDF 查看器并不意味着它为该文件类型注册了一个意图过滤器 - 用户可能必须先打开应用程序,浏览文件列表,然后从那里。询问用户他们有什么 PDF 阅读器。如果可能,请告诉他们下载 Adobe PDF 阅读器,然后重试。