【发布时间】:2012-04-24 06:22:50
【问题描述】:
我知道这类问题已经在 SO 上回答过很多次了。但我找不到适合我要求的答案。
我需要知道客户端上是否安装了 Adobe Reader for Android。如果没有从应用程序触发阅读器的安装,然后查看 pdf...
我是 Android 的新手...感谢您的代码流程..
谢谢你。
【问题讨论】:
我知道这类问题已经在 SO 上回答过很多次了。但我找不到适合我要求的答案。
我需要知道客户端上是否安装了 Adobe Reader for Android。如果没有从应用程序触发阅读器的安装,然后查看 pdf...
我是 Android 的新手...感谢您的代码流程..
谢谢你。
【问题讨论】:
您好 Kunal,我已经为您编写了一些代码,请交叉验证,因为我还没有测试过它
public static final String QUICK_OFFICE_URL = "https://market.android.com/search?q=quick+office&so=1&c=apps";
public static final String QUICK_OFFICE_TRIAL_PACKAGE = "com.qo.android.am3.trial";
public static final String QUICK_OFFICE_PACKAGE = "com.qo.android.am3";
public static final String ADOBE_READER_URL="https://market.android.com/search?q=adobe+reader&so=1&c=apps";
public static final String ADOBE_READER_PACKAGE="com.adobe.reader";
public static final String DOCUMENTS_TO_GO_PACKAGE = "com.dataviz.docstogo";
public static final String GOOGLE_DOCUMENT_PACKAGE ="com.google.android.apps.docs";
public static final String OPEN_OFFICE_PACKAGE = "at.tomtasche.reader";
public static final String BEAMREADER_PACKAGE = "com.slgmobile.beamreader";
public static final String PDFVIEWER_PACKAGE = "mobi.mgeek.pdfviewer";
public static final String ANDROID_PDF_VIEWER_PACKAGE = "net.sf.andpdf.pdfviewer";
public static final String EZ_READER = "udk.android.reader";
public static final String PDF_VIEWER = "com.dzepina.pdfviewer";
private void openFileForReading(File file, String extension) {
Log.v(TAG, " openFileForReading(File file, String extension)");
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
if (extension.equalsIgnoreCase("pdf")) {
Log.v(TAG, " file extension is .pdf");
if (appInstalledOrNot(Common.ADOBE_READER_PACKAGE)
|| appInstalledOrNot(Common.BEAMREADER_PACKAGE)
|| appInstalledOrNot(Common.PDF_VIEWER)
|| appInstalledOrNot(Common.PDFVIEWER_PACKAGE)
|| appInstalledOrNot(Common.EZ_READER)) {
intent.setDataAndType(Uri.fromFile(file), "application/*");
startActivity(intent);
} else {
showAlertDialog(Common.ADOBE_READER_URL, file);
}
} else if (extension.equalsIgnoreCase("doc")) {
Log.v(TAG, " file extension is .doc");
if (appInstalledOrNot(Common.QUICK_OFFICE_PACKAGE)
|| appInstalledOrNot(Common.DOCUMENTS_TO_GO_PACKAGE)
|| appInstalledOrNot(Common.GOOGLE_DOCUMENT_PACKAGE)
|| appInstalledOrNot(Common.OPEN_OFFICE_PACKAGE)) {
intent.setDataAndType(Uri.fromFile(file), "application/*");
startActivity(intent);
} else {
showAlertDialog(Common.QUICK_OFFICE_URL, file);
}
} else if (extension.equalsIgnoreCase("docx")) {
Log.v(TAG, " file extension is .docx");
if (appInstalledOrNot(Common.QUICK_OFFICE_PACKAGE)
|| appInstalledOrNot(Common.DOCUMENTS_TO_GO_PACKAGE)
|| appInstalledOrNot(Common.GOOGLE_DOCUMENT_PACKAGE)
|| appInstalledOrNot(Common.OPEN_OFFICE_PACKAGE)) {
intent.setDataAndType(Uri.fromFile(file), "application/*");
startActivity(intent);
} else {
showAlertDialog(Common.QUICK_OFFICE_URL, file);
}
} else {
intent.setDataAndType(Uri.fromFile(file), "application/*");
startActivity(intent);
}
}
private void showAlertDialog(final String uri, final File file) {
AlertDialog.Builder dialog = new AlertDialog.Builder(
DocumentsActivity.this);
dialog.setTitle("No Application Found !!!");
dialog.setMessage("Install App From Market");
dialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(uri));
startActivity(intent);
}
});
dialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/*");
startActivity(intent);
dialog.cancel();
}
});
dialog.show();
}
private boolean appInstalledOrNot(String packageName) {
PackageManager pm = getPackageManager();
boolean app_installed = false;
try {
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
app_installed = true;
} catch (PackageManager.NameNotFoundException e) {
app_installed = false;
}
return app_installed;
}
【讨论】:
如果您想在未安装 Reader 的情况下链接到市场,您可以在 Activity 中触发此 Intent:
Intent marketIntent = new Intent(Intent.ACTION_VIEW)
.setData(Uri.parse("market://details?id=com.adobe.reader"));
startActivity(marketIntent);
查看 PDF 有点棘手:
Intent showPDFIntent = new Intent();
showPDFIntent.setPackage("com.adobe.reader");
showPDFIntent.setDataAndType(Uri.fromFile(myPDFFile), "application/pdf");
startActivity(showPDFIntent);
我希望这会有所帮助。
最好的祝愿, 蒂姆
【讨论】: