web-dev-qa-db-fra.com

Erreur FileProvider

https://developer.Android.com/training/camera/photobasics.html

Tout ce que j'essaie de faire est de prendre une photo avec l'appareil photo, de l'enregistrer et de l'afficher dans un ImageView.

J'ai suivi le tutoriel Android ci-dessus et continue de recevoir une erreur (une NullPointerException) sur la ligne:

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

Je sais que je dois configurer FileProvider dans le manifeste de mon application et que les «autorités» doivent correspondre. Je ne comprends pas très bien ce que je devrais mettre dans les arguments autorités. J'ai copié tout le code du tutoriel, y compris le fichier res/xml/file_paths.xml. Posez des questions si nécessaire.

Merci!

14
rafvasq

J'ai finalement réussi à le faire fonctionner!

N'oubliez pas de mettre la balise de fournisseur À L'INTÉRIEUR de la balise d'application dans le fichier manifeste - c'est mon erreur (ma balise de fournisseur était à l'extérieur de la balise d'application) et la raison pour laquelle vous obtenez cette erreur, qui indique en gros qu'il ne trouve pas la définition du fournisseur . 

Assurez-vous également que vous avez les bons chemins dans le fichier .xml. Voici ma 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>

Bien sûr, vous devez changer le chemin pour votre propre application.

Mon fournisseur actuel ressemble alors à ceci:

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

Là encore, vous devrez modifier la valeur des autorités dans votre propre application.

Vous pouvez voir toutes les sources sur le dépôt GitHub de ma question initiale.

28
zaifrun

J'ai aussi oublié de mettre <provider> dans <application>; Je les ai mis à tort au même niveau que celui que j'ai fixé depuis.

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

chemin_fichiers.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>
1
Zavvio Mok