我正在编写一个 Android 应用程序来在设备上显示 pdf 文件。而且我需要使用 Adobe Reader 的当前版本代码(35498)来显示 pdf 文件。我有代码可以在屏幕上显示文件列表。现在我需要在点击每个文档时调用 Adobe 阅读器(不是设备上安装的任何其他 pdf 阅读器)。我不确定我是如何编码的。我是安卓新手。任何帮助将不胜感激。
提前致谢, 纳文
我正在编写一个 Android 应用程序来在设备上显示 pdf 文件。而且我需要使用 Adobe Reader 的当前版本代码(35498)来显示 pdf 文件。我有代码可以在屏幕上显示文件列表。现在我需要在点击每个文档时调用 Adobe 阅读器(不是设备上安装的任何其他 pdf 阅读器)。我不确定我是如何编码的。我是安卓新手。任何帮助将不胜感激。
提前致谢, 纳文
试试下面的代码
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;
}
}
我看到您想专门打开 Adobe,但您可能需要考虑以更类似于 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)
如果您处于“在线模式”,这里有一个使用 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);
这有效,如果通过 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;
}