7

我正在编写一个 Android 应用程序来在设备上显示 pdf 文件。而且我需要使用 Adob​​e Reader 的当前版本代码(35498)来显示 pdf 文件。我有代码可以在屏幕上显示文件列表。现在我需要在点击每个文档时调用 Adob​​e 阅读器(不是设备上安装的任何其他 pdf 阅读器)。我不确定我是如何编码的。我是安卓新手。任何帮助将不胜感激。

提前致谢, 纳文

4

4 回答 4

10

试试下面的代码

private void loadDocInReader(String doc)
     throws ActivityNotFoundException, Exception {

    try {
                Intent intent = new Intent();

                intent.setPackage("com.adobe.reader");
                intent.setDataAndType(Uri.parse(doc), "application/pdf");

                startActivity(intent);

    } catch (ActivityNotFoundException activityNotFoundException) {
                activityNotFoundException.printStackTrace();

                throw activityNotFoundException;
    } catch (Exception otherException) {
                otherException.printStackTrace();

                throw otherException;
    }
}
于 2011-02-25T04:13:55.230 回答
9

我看到您想专门打开 Adob​​e,但您可能需要考虑以更类似于 Android 的方式打开一般意图并允许用户选择打开方式。供您参考,您可以使用以下代码执行此操作:

private void openFile(File f, String mimeType)
{
    Intent viewIntent = new Intent();
    viewIntent.setAction(Intent.ACTION_VIEW);
    viewIntent.setDataAndType(Uri.fromFile(file), mimeType);
    // using the packagemanager to query is faster than trying startActivity
    // and catching the activity not found exception, which causes a stack unwind.
    List<ResolveInfo> resolved = getPackageManager().queryIntentActivities(viewIntent, 0);
    if(resolved != null && resolved.size() > 0)
    {
        startActivity(viewIntent);
    }
    else
    {
        // notify the user they can't open it.
    }
}

如果您确实需要专门使用 Abode Reader 和特定版本,则需要使用PackageManager.getPackageInfo(String, int)

于 2011-02-25T04:51:53.393 回答
6

如果您处于“在线模式”,这里有一个使用 Google 文档的有趣替代解决方案。

String myPDFURL = "http://{link of your pdf file}";

String link;
try {
    link = "http://docs.google.com/viewer?url="
    + URLEncoder.encode(myPDFURL, "UTF-8")
    + "&embedded=true";
} catch (Exception e) {
    e.printStackTrace();
}

Uri uri = Uri.parse(link);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
于 2011-10-07T07:19:07.990 回答
2

这有效,如果通过 URL 使用 setDataAndType 方法似乎无法正确识别 PDF 类型。

private static Intent newPDFLinkIntent(String url) {
    Uri pdfURL = Uri.parse(url);
    Intent pdfDownloadIntent = new Intent(Intent.ACTION_VIEW, pdfURL);
    pdfDownloadIntent.setType("application/pdf");
    pdfDownloadIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    return pdfDownloadIntent ;
}

不幸的是,我使用的 PDF 应用程序不会下载和缓存在线内容(有些会出现内存泄漏错误,有些会拒绝链接下载),所以你最终会调用一个先下载 PDF 的意图,在通过通知链接打开下载的内容之前。我最终使用了以下解决方案:

private static Intent newPDFLinkIntent(String url) {
    Intent pdfDownloadIntent = null;
    try {
        pdfDownloadIntent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
        pdfDownloadIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    } catch (URISyntaxException e) {
        Log.e("PDF Link Tag", e.getMessage());
    }
    return pdfDownloadIntent;
}
于 2013-01-04T04:44:55.983 回答