我正在开发一个应用程序,因为我想从资产中显示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
然后显示以下错误。
答案 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