【问题标题】:Reading pdf stored in internal Memory(The File path is not Valid)读取存储在内存中的pdf(文件路径无效)
【发布时间】:2012-01-22 06:49:46
【问题描述】:

我想打开存储在移动内存中的 pdf... 我正在尝试将文件的路径传递给 Uri ..但它一直向我显示此错误 “文件路径无效” 但我确定我走的是正确的道路..

    targetFile=new File("/data/data/package Name/app_mydir/test.pdf");

            }

        Intent intent;
        intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(targetFile), "application/pdf");


               startActivity(intent);

【问题讨论】:

  • 您的文件是如何保存的?通常,数据文件最终位于应用程序目录中名为“files”的文件夹中,而不是根目录中。
  • 我正在使用这个目录 = getBaseContext().getDir("mydir", Context.MODE_PRIVATE); } 文件 file1 = 新文件(目录,PdfName);
  • replace "getBaseContext()" with "YourActivityName.this" 此外,如果您尝试将文件传递给另一个应用程序,您可能无法使用 MODE_PRIVATE。
  • 我正在使用相同的代码来保存和读取音频文件,并且它可以工作......但它不适用于 pdf 文件
  • 你安装了什么PDF查看器?我认为 Adob​​e 阅读器不支持启动这样的视图意图,如果您要使用该应用程序,您必须明确选择它作为您希望用来打开的应用程序。不过,有一些 3rd 方可以按照您现在的方式工作。

标签: android pdf path internal


【解决方案1】:

应用程序内部存储目录中的文件默认为应用程序私有。这意味着没有 PDF-Reader 应用程序可以读取该文件(因为它不使用您的应用程序 pid 运行 - 没有授予读取权限)

您必须以其他应用程序的明确阅读权限保存该 PDF 通过使用Context.MODE_WORLD_READABLE 标志。请参阅data storage documentation 如何准确地做到这一点。

还可以使用Context.openFileOutput()Context.openFileInput() 读取和写入内部目录中的文件(如上述文档中所述)。不要像这样对路径进行硬编码,它们可能会改变。

【讨论】:

  • 问题是关于对所有应用程序公开的内部存储,只有缓存目录和数据目录对应用程序是私有的。 (假设手机有 32 GB 的内部存储和 32 GB 的外部 sd 卡,这里的问题是指内部存储)
【解决方案2】:

检查输出

targetFile.exists();

如果返回 true,那么你就可以开始了,否则你的路径有问题。

【讨论】:

  • 你应该发布一个完整的堆栈跟踪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多