从android中的资产文件夹打开pdf文件
Posted
技术标签:
【中文标题】从android中的资产文件夹打开pdf文件【英文标题】:open pdf file from asset folder in android 【发布时间】:2013-12-06 19:01:08 【问题描述】:我在资产文件夹中放置了一个 pdf 文件 (bang.pdf),单击按钮时我需要打开并显示资产文件夹中的 pdf。 代码是:
package com.example.pdfviewer;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.res.AssetManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity
Button but1;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
but1 = (Button)findViewById(R.id.but1);
but1.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
Toast.makeText(MainActivity.this,"hai" , Toast.LENGTH_SHORT).show();
CopyReadAssets();
);
private void CopyReadAssets()
AssetManager assetManager = getAssets();
InputStream in = null;
OutputStream out = null;
File file = new File(getFilesDir(), "bang.pdf");
try
in = assetManager.open("bang.pdf");
out = 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.parse("file://" + getFilesDir() + "/bang.pdf"),
"application/pdf");
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);
但是当我单击按钮时,会显示以下错误 错误:- android.content.ActivityNotFoundException:未找到处理 Intent act=android.intent.action.VIEW dat=file:///data/data/com.example.pdfviewer/files/bang.pdf typ=application /pdf 在 mainifest 文件中:- 我提到 我在我的设备中安装了 adobe reader 应用程序,仍然收到相同的错误消息。
请帮帮我
提前致谢
【问题讨论】:
看这里:***.com/questions/17085574/… 【参考方案1】:我看到这里给出了答案:
Read a pdf file from assets folder
(几乎就像问题一样,但添加了附加项目,缺少对权限 WRITE_EXTERNAL_STORAGE 的请求)。 file:// 似乎没问题,指的是外部存储。
也许有比外部复制更好的方法(按照 Siddharth Vyas 的建议复制到内部存储 + ContentProvider?)。
【讨论】:
【参考方案2】:file://android_asset 仅适用于您的应用
您需要:
-
将文件复制到外部存储,或
将文件复制到内部存储并使用 ContentProvider 使其可用于 PDF 查看应用程序
希望这会有所帮助。
【讨论】:
以上是关于从android中的资产文件夹打开pdf文件的主要内容,如果未能解决你的问题,请参考以下文章
Android:如何在 android 中从服务器打开 pdf 文件 [关闭]