如何确定Android是否可以处理PDF

Jas*_*hah 29 pdf android

我知道Android无法原生处理PDF.但是,Nexus One(可能还有其他手机)预先安装了QuickOffice Viewer.如何确定用户是否安装了PDF查看器?

目前,启动PDF下载的代码看起来非常简单:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

下载后,用户单击下载的文件以调用查看器.但是,如果没有PDF查看器,Android会报告"无法下载.手机不支持该内容".我想确定用户是否会收到此消息,如果是,请将其指向Android电子市场中的PDF应用.

Man*_*ser 56

我一直在测试这个,发现以下工作.首先,您单独下载文件并将其存储在设备上然后执行此操作:

 File file = new File("/sdcard/download/somepdf.pdf");

 PackageManager packageManager = getPackageManager();
 Intent testIntent = new Intent(Intent.ACTION_VIEW);
 testIntent.setType("application/pdf");
 List list = packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY);
 if (list.size() > 0 && file.isFile()) {
     Intent intent = new Intent();
     intent.setAction(Intent.ACTION_VIEW);
     Uri uri = Uri.fromFile(file);
     intent.setDataAndType(uri, "application/pdf");

     startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

我已经在各种模拟器和带根的氰基手机以及HTC Magic上测试了这个.如果没有可用的pdf渲染器,则列表将返回零,并且不会发生任何事情.

将数据类型设置为pdf mime类型以获得正确的行为似乎很重要.

如果您安装了droidreader,它会对意图做出反应并显示pdf.

当然,您可以在下载pdf之前进行检查,具体取决于您的使用案例,或者执行诸如弹出警报或重定向其他意图以供下载或其他任何操作.

编辑:我已经将这个重构为一个单独的方法..

    public static final String MIME_TYPE_PDF = "application/pdf";

/**
 * Check if the supplied context can render PDF files via some installed application that reacts to a intent
 * with the pdf mime type and viewing action.
 *
 * @param context
 * @return
 */
public static boolean canDisplayPdf(Context context) {
    PackageManager packageManager = context.getPackageManager();
    Intent testIntent = new Intent(Intent.ACTION_VIEW);
    testIntent.setType(MIME_TYPE_PDF);
    if (packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY).size() > 0) {
        return true;
    } else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您应该在`canDisplayPdf`方法中使用`setDataAndType` - 结果与'setType'不同. (2认同)

Rom*_*Guy 10

您可以查询PackageManager以查看是否有可以处理您的Intent的包.这是一个例子:http://www.curious-creature.org/2008/12/15/android-can-i-use-this-intent/

  • 这告诉我,BrowserActivity可以处理PDF,即使在Android 1.5模拟器上也是如此.但是,在该模拟器下载文件后,下载列表显示"无法下载.手机不支持该内容".我如何确定是否会收到此消息? (4认同)