2017-10-19 46 views
0

我想打開PDF格式,這是interaly保存在應用程序/資產/ pdf_name.pdf從資產中分享PDF。 FileUriExposedException

我得到使用 File f = new File(getContext().getCacheDir() + /pdf_name.pdf");

我試圖提取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

ALthout我可配置

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

我的目標是通過意向來打開PDF,但我不能只是做:因爲它拋出文件URI暴露例外

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 

回答

1

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> 
+0

你save'd我的一天。我很接近,因爲當我第一次輸入姓名時,Android Studio強調錯誤:它應該包含路徑,所以我放棄了這個想法。然而它編譯,畢竟作品。 – murt