13

https://developer.android.com/training/camera/photobasics.htmlFileProvider Fehler

Alles, was ich ein Bild mit der Kamera zu tun versuche, ist zu nehmen, sie speichern und in einem Image anzuzeigen.

ich das Android-Tutorial gefolgt oben und halten einen Fehler (ein Nullpointer) auf der Linie erhalten:

Uri photoURI = FileProvider.getUriForFile(this, "com.example.android.fileprovider", photoFile); 

Ich weiß, dass ich die FileProvider in meiner app Manifest und die „Behörden“ konfigurieren müssen, hat passen. Ich verstehe nicht ganz, was ich in die Behörden Argumente setzen sollte. Ich habe den gesamten Code aus dem Tutorial kopiert, einschließlich der Datei res/xml/file_paths.xml. Stellen Sie bei Bedarf Fragen.

Danke!

+0

Mögliche Duplikat [Was für eine Nullpointer ist, und wie kann ich es beheben?] (Http://stackoverflow.com/questions/218384/what-is- a-nullpointerexception-and-how-do-i-fix-it) – TheAnonymous010

+1

Nein, Frage geht darum, wie man FileProvider verwendet, nicht unbedingt, wie man einen NullPointer repariert – rafvasq

+0

Schön zu sehen, dass Sie den Titel entsprechend aktualisiert haben. – TheAnonymous010

Antwort

24

Ich habe es endlich zur Arbeit gebracht!

Denken Sie daran, das Provider-Tag innerhalb der Anwendung Tag in der Manifest-Datei - das war mein Fehler (meine Provider-Tag war außerhalb des Anwendungs-Tags), und der Grund, dass Sie diesen Fehler, der besagt, dass es nicht finden kann Definition des Anbieters.

Stellen Sie außerdem sicher, dass Sie die richtigen Pfade in der XML-Datei haben. Hier ist meine Version:

<?xml version="1.0" encoding="utf-8"?> 
<paths xmlns:android="http://schemas.android.com/apk/res/android"> 

    <external-path 
     name="my_images" 
     path="Android/data/org.projects.cameraapp/files/Pictures" /> 

</paths> 

Natürlich müssen Sie den Pfad für Ihre eigene Anwendung ändern.

Meine eigentliche Provider sieht dann wie folgt aus:

<provider 
    android:name="android.support.v4.content.FileProvider" 
    android:authorities="org.projects.cameraapp.fileprovider"   
    android:exported="false" 
    android:grantUriPermissions="true"> 

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

</provider> 

Auch Sie werden den Behörden Wert in Ihrer eigenen Anwendung ändern müssen.

Sie können alle Quelle im GitHub-Repository von meiner ursprünglichen Frage aus sehen.

+0

Ich erzeuge eine Datei in meiner App und will um sie an eine andere App zu senden, um sie zu speichern. Was setze ich 'android: resource' in' meta-data'? – Ishan

1

Ich habe auch vergessen, <provider> innerhalb <application> zu setzen; Ich habe sie fälschlicherweise auf die gleiche Ebene gesetzt, die ich seither behoben habe.

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="zm.mytestapplication"> 

<application 
    ... 
    android:theme="@style/AppTheme"> 

    <provider 
     android:name="android.support.v4.content.FileProvider" 
     android:authorities="zm.mytestapplication.fileprovider" 
     android:exported="false" 
     android:grantUriPermissions="true"> 
     <meta-data 
      android:name="android.support.FILE_PROVIDER_PATHS" 
      android:resource="@xml/file_paths"></meta-data> 
    </provider> 
</application> 
</manifest> 

file_paths.xml

<?xml version="1.0" encoding="utf-8"?> 
<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
    <external-path name="my_images" path="Pictures/zm/" /> 
</paths> 
+0

müssen wir Prebuild-Ordner oder es wird einen eigenen Ordner erstellen –

Verwandte Themen