Android - 阅读pdf并使用Intent显示它

时间:2014-01-30 09:30:56

标签: android pdf android-intent

我正在开发一个应用程序,因为我想从资产中显示pdf文件。我做了很多谷歌,并尝试了多种排列和组合,但没有工作。

CODE:

private void CopyReadAssets()
{
    AssetManager assetManager = getActivity().getAssets();

    InputStream in = null;
    OutputStream out = null;
    File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/abc.pdf");
    try
    {
        in = assetManager.open("abc.pdf");
        out = getActivity().openFileOutput(file.getName(), Context.MODE_WORLD_READABLE);

        copyFile(in, out);
        in.close();
        in = null;
        out.flush();
        out.close();
        out = null;
    }
    catch (Exception e)
    {
        Log.e("tag", e.getMessage());
    }

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.fromFile(file), "application/pdf");
    intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
    startActivity(intent);
}

private void copyFile(InputStream in, OutputStream out) throws IOException
{
    byte[] buffer = new byte[1024];
    int read;
    while ((read = in.read(buffer)) != -1)
    {
        out.write(buffer, 0, read);
    }
}

当我点击列表时,我会调用CopyReadAssets()函数,然后它会提示我要打开哪个查看器然后点击AdobeReader然后显示以下错误。

enter image description here

3 个答案:

答案 0 :(得分:5)

我检查了你的代码你必须改变一些错误,可能是你复制了here.的代码

替换 AssetManager assetManager = getAssets();

而不是AssetManager assetManager = getActivity().getAssets();

直接使用File file = new File(getFilesDir(), "abc.pdf");

而不是

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/abc.pdf");

希望它适合你。!!!

答案 1 :(得分:1)

您可以使用网页视图 -

执行此操作
     webview = (WebView) findViewById(R.id.prayertimes_webview);
     webview.getSettings().setJavaScriptEnabled(true);
     webview.getSettings().setPluginsEnabled(true);
     webview.getSettings().setSupportZoom(true);
     webview.getSettings().setBuiltInZoomControls(true);
            String urll = "http://docs.google.com/gview?embedded=true&url=" + url;
            webview.setWebViewClient(new WebViewClient()); 
            webview.loadUrl(urll);

答案 2 :(得分:0)

PDF文件无法在PDF阅读器中看到,因为资源中的任何内容都是您应用的私有内容。你必须以某种方式公开它。有几种方法可以解决这个问题。

最复杂的方法是实施公开ContentProvider并覆盖其中的openAssetFile方法。通过Intent传递文件的URL,PDF阅读器应该能够使用ContentResolver并通过openAssetFileDescriptor方法获取PDF文件。

这是一个链接。 - http://www.nowherenearithaca.com/2012/03/too-easy-using-contentprovider-to-send.html