从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 文件 [关闭]

如何在 android 中阅读和查看 PDF?

在应用程序中打开资产文件 pdf

在android studio中使用上一个和下一个按钮打开不同的pdf文件?

从颤振资产加载 .pdf 文件/自定义文件

如何从意图过滤器接收 pdf 文件 - Android