无法从assets文件夹中查看pdf

时间:2014-03-28 10:47:24

标签: android

以下是代码:

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 }

5 个答案:

答案 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”);“