2013-11-28 46 views
14

我有一個關於android FileProvider的問題。 我想保存一份pdf文檔並用默認程序打開它。 我不想將它保存在外部存儲器中。Android FileProvider:IllegalArgumentException:無法找到包含的配置根

後從來就成功保存的PDF到FilesDirectory /出口/ temp.pdf,
從來就試圖通過使用FileProvider.getUriForFile以生成URI()。

File path = new File(getFilesDir(), "export"); 
File pdf = new File(path + File.separator + "temp.pdf"); 
pdf.getParentFile().mkdirs(); 

if (!pdf.exists()) 
    pdf.createNewFile(); 

Uri uri = FileProvider.getUriForFile(getApplicationContext(), "?", pdf); 

問:我有什麼要傳遞的第二個參數的「權威」 - 我的文件的位置,可授予URI的權限或其他東西類?無論我嘗試過什麼,都會導致IllegalArgumentException或NullPointerException。 我FileProvider(XML):

<provider   
    android:name="android.support.v4.content.FileProvider"   
     android:authorities="com.example.myApp.myActivity" 
     android:exported="false" 
     android:grantUriPermissions="true"> 

     <meta-data     
      android:name="android.support.FILE_PROVIDER_PATHS"       
      android:resource="@xml/file_path"/>          
</provider> 

引用的文件:

<?xml version="1.0" encoding="utf-8"?> 
<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
    <cache-path name="pdfTemplates" path="export/" /> 
</paths> 
+1

我有完全相同的問題。你有沒有找到答案? –

回答

11

我明白了。有兩個不同的問題

  1. CodeDiving回答了第一個問題。 我必須使用getUriForFile調用的提供者聲明中的權限。使用其他類導致NullPointerException。

  2. 我試過從filesDirectory獲取文件,但在我的file_path中,我只聲明瞭緩存目錄的路徑。我將它改爲'文件路徑',它工作。此錯誤導致IllegalArgumentException。

+2

確保它是'files-path'而不是'file-path'。很容易錯過! – Malfunction

+2

這個'files-path'在哪裏?我的意思是你在哪裏指定它。 –

+2

@IgorGanapolsky他在引用的xml文件_file_path_中用' oldergod

7

根據您的FileProvider文件(XML),第二個參數是com.example.myApp.myActivity。那是

Uri uri = FileProvider.getUriForFile(getApplicationContext(), 
            "com.example.myApp.myActivity", pdf); 
相關問題