以下是代码:
Uri path = Uri.parse("file:///android:asset/Shadi_kiraat.pdf");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(path, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
我正在尝试从assets文件夹访问pdf文件,但收到错误。
E/AndroidRuntime(1325): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///android:asset/Sa.pdf typ=application/pdf flg=0x4000000 }
答案 0 :(得分:1)
这意味着您的设备中未安装PDF支持的文件。因此,当您运行应用程序时,您将获得此类异常。
E/AndroidRuntime(1325): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///android:asset/Sa.pdf typ=application/pdf flg=0x4000000 }
所以你可以使用这个
Uri path = Uri.parse("file:///android:asset/Shadi_kiraat.pdf");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(path, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try{
startActivity(intent);
} catch (ActivityNotFoundException ex){
Toast.makeText(this, "No activity found", Toast.LENGTH_LONG).show(); //Display an error message
}
答案 1 :(得分:0)
如果你得到一个ActivityNotFoundException
是因为没有应用程序来处理这种内容。因此,在这种情况下,您可以安装Adobe Reader
或任何第三方pdf查看器。
答案 2 :(得分:0)
我认为您正在尝试使用其他应用程序(如adobe reader)访问pdf文件,如果您没有adobe reader,则会出现此类错误
安装Adobe阅读器并再试一次它可以正常运行
答案 3 :(得分:0)
如果您收到“ActivityNotFoundException”,则表示您的设备未安装pdf查看器。
因此,在这种情况下,您可以重定向用户以下载prf查看器。
以下是示例代码:
/**
* Show pdf.
*
* @param context the context
* @param fileName the file name
*/
public static void showPDF(Context context, String fileName) {
try {
Intent intentUrl = new Intent(Intent.ACTION_VIEW);
intentUrl.setDataAndType(getFileUri(context, fileName), "application/pdf");
intentUrl.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intentUrl);
} catch (ActivityNotFoundException e) {
Toast.makeText(context, "No PDF Viewer Installed", Toast.LENGTH_LONG).show();
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=com.adobe.reader")));
}
}
另外,在我的情况下,我无法直接从assets文件夹打开pdf文件。因此,我在查看之前将pdf文件从assets文件夹复制到手机SD卡。
以下是用于将资产文件夹中的文件复制到SDCard并返回新文件URL的代码段。
/**
* Gets the file uri.
*
* @param context the context
* @param fileName the file name
* @return the file uri
*/
private static Uri getFileUri(Context context, String fileName) {
String path = Environment.getExternalStorageDirectory().getPath() + File.separator + "myAppFolder" + File.separator;
File file = new File(path, fileName);
if (!file.exists() || file.length() == 0) {
OutputStream outputStream = null;
InputStream inputStream = null;
try {
File dir = new File(path);
if (!dir.exists()) {
dir.mkdir();
}
new File(path, ".nomedia").createNewFile();
outputStream = new FileOutputStream(file);
inputStream = context.getAssets().open("docs/" + fileName);
byte[] buffer = new byte[1024];
int read;
while ((read = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, read);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
inputStream = null;
outputStream.flush();
outputStream.close();
outputStream = null;
} catch (Exception e) {
e.printStackTrace();
}
}
}
return Uri.fromFile(file);
}
答案 4 :(得分:0)
尝试更改此“ Uri路径= Uri.parse(“ file:/// android:asset / Shadi_kiraat.pdf”);“到“ Uri路径= Uri.formFile(“ file:/// android:asset / Shadi_kiraat.pdf”);“