【问题标题】:Open pdf files located inside the App (raw folder)打开位于 App 内的 pdf 文件(原始文件夹)
【发布时间】:2011-07-21 18:16:13
【问题描述】:

我需要在外部应用程序(如 Adob​​e Reader)中打开应用程序内的一些 pdf 文件(原始文件夹)

如果文件在 SD 卡中,我尝试使用此代码完美运行,但是,如果我尝试将应用程序(包)目录放在文件行中,则没有任何反应:

public void onClick(View v) {
            File file = new File("/sdcard/myfile2.pdf");

            if (file.exists()) {
                Uri path = Uri.fromFile(file);
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setDataAndType(path, "application/pdf");
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                try {
                    startActivity(intent);
                } 
                catch (ActivityNotFoundException e) {
                    Toast.makeText(referencias.this, 
                        "No Application Available to View PDF", 
                        Toast.LENGTH_SHORT).show();
                }
            }
        }

我也试试这段代码。 应用程序 Adob​​e 阅读器打开但我收到无效的访问目录错误:

public void onClick(View v) {
            Intent i = new Intent();
            i.setAction(Intent.ACTION_VIEW);

                 i.setDataAndType(Uri.parse("file:///data/app/mypackage/res/raw/myfile.pdf"),
            "application/pdf");

            try{
                startActivity(i);
                }
                catch (ActivityNotFoundException e) {
                Toast.makeText(referencias.this,
                "No Application Available to View PDF",
                Toast.LENGTH_SHORT).show();
                }

最后的解决方案是每次从原始文件夹复制pdf文件到SD卡,如this tutorial

但是真的很复杂,代码很多。

【问题讨论】:

  • "file:///data/app/mypackage/res/raw/myfile.pdf" 不是有效的 URL,因为包中没有文字文件系统文件。如果可以通过 URL 访问 .apk 的内容,则它必须是不同形式之一 - 所有 file:///data/app/... 都可以让您获取 .apk 的 zip 文件。 apk 本身。
  • 能否给我看一下onSave代码,我认为问题出在 File file =new File(...);

标签: android file pdf


【解决方案1】:

如果您使用该应用编写 pdf,则应用文件权限可能不允许外部可见性。签出:http://developer.android.com/guide/topics/data/data-storage.html#filesInternal

【讨论】:

  • 问题指定了应用程序不可写的原始文件夹,因此 PDF 必须已预先打包,使得此答案不适用。
  • 谢谢大家。我检查了上面的链接,我发现了这个提示:“如果你想在编译时在你的应用程序中保存一个静态文件,请将文件保存在你的项目 res/raw/ 目录中。你可以使用 openRawResource() 打开它,传递R.raw. 资源 ID。此方法返回一个 InputStream,您可以使用它来读取文件(但您不能写入原始文件)。有人可以帮我提供示例代码吗?
  • 是的,您可以将文件保存在 /res/raw 中,然后使用输入流从文件中读取字节: InputStream ins = getResources().openRawResource( R.raw.my_file );但我认为你真正想要的是将 pdf 文件与你的应用程序捆绑在一起,然后使用该应用程序查看它。让它工作的方法是使用sd卡。我认为这个问题对你更有用:stackoverflow.com/questions/6491210/…
【解决方案2】:

试试这个:

File mFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
                "your_file.ext"); // ext meens extension .doc .zip ....

然后将您的数据保存到此文件中,制定一个您已经制定的意图......但是 使用 mFile 而不是创建新文件或

File fileForUri=new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+"your_file.ext"

试试这个

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 2018-05-26
    • 1970-01-01
    相关资源
    最近更新 更多