首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定Android是否可以处理PDF

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

Stack Overflow用户
提问于 2010-05-07 06:04:51
回答 3查看 23.2K关注 0票数 29

我知道Android不能在本地处理PDF。但是,Nexus One (可能还有其他电话)预装了QuickOffice查看器。如何确定用户是否安装了PDF查看器?

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

代码语言:javascript
复制
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);

下载后,用户单击下载的文件以调用查看器。然而,如果没有PDF查看器,Android报告“无法下载。手机不支持该内容。”我想确定用户是否会收到此消息,如果是,请将他们定向到Android Market中的PDF应用程序。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-08 01:21:51

我一直在测试这一点,并发现以下方法是有效的。首先,您可以独立下载该文件并将其存储在设备上,然后执行以下操作:

代码语言:javascript
复制
 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);

我已经在不同的模拟器和一个扎根的氰根手机以及HTC Magic上进行了测试。如果没有可用的pdf渲染器,列表将返回零,并且不会发生任何事情。

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

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

当然,您也可以在下载pdf之前进行检查,这取决于您的用例,或者做一些事情,比如弹出警报或重定向,做其他意图下载或其他任何事情。

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

代码语言:javascript
复制
    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;
    }
}
票数 56
EN

Stack Overflow用户

发布于 2010-05-07 08:42:39

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

票数 10
EN

Stack Overflow用户

发布于 2016-11-03 15:33:40

你可能会使用异步任务来下载任何file.so,简单的方法就是在异步task.it的post execute()方法中添加下面的代码供你选择。

代码语言:javascript
复制
FileOpener.open(context, file);

和文件应包含有关文件路径和filename.Example的信息

代码语言:javascript
复制
File file = new File(Environment
        .getExternalStoragePublicDirectory("/MDroid")
        + filepath + fileName );

希望能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2784847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档