从资产共享 PDF。 FileUriExposedException 异常
Share PDF from assets. FileUriExposedException
我想打开内部保存在 app/assets/pdf_name.pdf
中的 PDF
我使用
File f = new File(getContext().getCacheDir() + /pdf_name.pdf");
如果使用
content:// 的形式,我正在尝试提取 URI
Uri pdfUri = FileProvider.getUriForFile(getContext(), "pcg_name.fileprovider", file);
但我得到了
java.lang.IllegalArgumentException: Failed to find configured root
that contains
/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 exposed 异常
I get the file using
该代码与资产无关。资产是您开发机器上的文件;它们不是设备上的文件,除非您手动将内容复制到文件。
也许您有代码(未在问题中显示)将文件从资产复制到 new File(getContext().getCacheDir() + /pdf_name.pdf")
。
ALthout I've configurated
这些都不适用于 new File(getContext().getCacheDir() + /pdf_name.pdf")
。删除一个 <cache-path>
元素并从另一个 <cache-path>
元素中删除 path
属性,留下:
<paths>
<cache-path name="my_pdf"/>
</paths>
我想打开内部保存在 app/assets/pdf_name.pdf
中的 PDF我使用
File f = new File(getContext().getCacheDir() + /pdf_name.pdf");
如果使用
content:// 的形式,我正在尝试提取 URIUri pdfUri = FileProvider.getUriForFile(getContext(), "pcg_name.fileprovider", file);
但我得到了
java.lang.IllegalArgumentException: Failed to find configured root that contains /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 exposed 异常
I get the file using
该代码与资产无关。资产是您开发机器上的文件;它们不是设备上的文件,除非您手动将内容复制到文件。
也许您有代码(未在问题中显示)将文件从资产复制到 new File(getContext().getCacheDir() + /pdf_name.pdf")
。
ALthout I've configurated
这些都不适用于 new File(getContext().getCacheDir() + /pdf_name.pdf")
。删除一个 <cache-path>
元素并从另一个 <cache-path>
元素中删除 path
属性,留下:
<paths>
<cache-path name="my_pdf"/>
</paths>