【问题标题】:open pdf file from asset folder in android从android中的资产文件夹打开pdf文件
【发布时间】: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 应用程序,仍然收到相同的错误消息。

请帮帮我

提前致谢

【问题讨论】:

标签: android pdf resources assets


【解决方案1】:

我看到这里给出了答案:

Read a pdf file from assets folder

(几乎就像问题一样,但添加了附加项目,缺少对权限 WRITE_EXTERNAL_STORAGE 的请求)。 file:// 似乎没问题,指的是外部存储。

也许有比外部复制更好的方法(按照 Siddharth Vyas 的建议复制到内部存储 + ContentProvider?)。

【讨论】:

    【解决方案2】:

    file://android_asset 仅适用于您的应用

    您需要:

    1. 将文件复制到外部存储,或
    2. 将文件复制到内部存储并使用 ContentProvider 使其可用于 PDF 查看应用程序

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-28
      • 2018-12-17
      • 2014-08-25
      • 2018-01-19
      • 2018-12-31
      • 1970-01-01
      • 2017-12-12
      • 2015-07-22
      相关资源
      最近更新 更多