我正在开发一款用于在设备上显示PDF文件的Android应用程序。我需要使用当前版本号(35498)的Adobe Reader来显示这些PDF文档。我已经编写了一些代码,可以在屏幕上显示文件列表。现在,我需要在单击每个文档时调用Adobe Reader(而不是设备上安装的其他PDF阅读器)。我不确定如何编写代码来实现这一点,因为我是一个Android新手。任何帮助将不胜感激。
谢谢!
Navin
我看到你想要打开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.
}
}
如果你确实需要同时使用特定版本的Adobe Reader,你需要使用PackageManager.getPackageInfo(String, int)
进行查询。
尝试以下代码
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;
}
}
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;
}