从资产中共享PDF。 FileUriExposedException

时间:2017-10-19 11:37:29

标签: android android-assets android-fileprovider

我想打开PDF,它在app / assets / pdf_name.pdf中进行了相互保存

我使用了该文件 File f = new File(getContext().getCacheDir() + /pdf_name.pdf");

我尝试使用

content:// 的形式提取URI

Uri pdfUri = FileProvider.getUriForFile(getContext(), "pcg_name.fileprovider", file);

但我得到了

  

java.lang.IllegalArgumentException:找不到配置的root   包含   /data/data/pck_name/cache/pdf_name.pdf

我还没有配置

<paths>
    <cache-path
        name="my_documents"
        path="assets/"/>
    <cache-path
        name="my_pdf"
        path="cache/"/>
</paths>

我的目标是通过Intent打开PDF,但我做不到:

Intent target = new Intent(Intent.ACTION_VIEW);
target.setDataAndType(Uri.fromFile(pdfFile),"application/pdf");
target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
target.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // DON'T FORGET this

因为它会抛出File Uri暴露的异常

1 个答案:

答案 0 :(得分:1)

  

我使用

获取文件

该代码与资产无关。资产是开发机器上的文件;它们不是设备上的文件,除非您手动将内容复制到文件中。

也许您有问题所示的代码,您将文件从资产复制到new File(getContext().getCacheDir() + /pdf_name.pdf")

  

我还没有配置

这些都不适用于new File(getContext().getCacheDir() + /pdf_name.pdf")。删除一个<cache-path>元素并从其他path元素中删除<cache-path>属性,然后使用:

<paths>
  <cache-path name="my_pdf"/>
</paths>