2013-11-28 6 views
14

Ich habe eine Frage über den Android FileProvider. Ich möchte ein PDF-Dokument speichern und mit einem Standardprogramm öffnen. Ich möchte es nicht im externen Speicher speichern.Android Fileprovider: IllegalArgumentException: Konnte nicht finden, konfigurierte Wurzel, die

Nach Ive erfolgreich das pdf zum FilesDirectory/export/temp.pdf gespeichert,
Ive versucht, eine URI zu erzeugen, indem FileProvider.getUriForFile() verwenden.

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); 

Frage: Was muss ich als zweiten Parameter „Behörde“ übergeben - die Lage meiner Dateien, die Klasse, die die URI-Berechtigungen oder etwas anderes gewähren kann? Was immer ich versucht habe, führte zu einer IllegalArgumentException oder einer NullPointerException. My 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> 

referenzierten Datei:

<?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

Ich habe genau das gleiche Problem. Hast du schon eine Antwort gefunden? –

Antwort

11

Ich habe es. Es gab zwei verschiedene Probleme

  1. Die erste Ausgabe wurde von CodeDiving beantwortet. Ich musste die Authority von der Provider-Deklaration für den Aufruf getUriForFile verwenden. Die Verwendung einer anderen Klasse verursachte die NullPointerException.

  2. Ich habe versucht, eine Datei von filesDirectory zu bekommen, aber in meinem file_path habe ich nur einen Pfad zum Zwischenspeichern von Verzeichnis deklariert. Ich habe es in 'Dateipfad' geändert und es hat funktioniert. Dieser Fehler hat die IllegalArgumentException verursacht.

+2

Stellen Sie sicher, dass es 'files-path' und nicht' file-path' ist. Leicht verpasst! – Malfunction

+2

Wohin geht dieser 'Dateipfad'? Ich meine, wo gibst du es an? –

+2

@IgorGanapolsky Er ersetzte den ' oldergod

7

Nach Ihrer FileProvider Datei (XML), ist der zweite Parameter com.example.myApp.myActivity. Das ist