Configurer le partage de fichiers

Pour proposer de manière sécurisée un fichier de votre appli à une autre appli, vous devez configurer votre appli de sorte qu'elle un handle sécurisé vers le fichier, sous la forme d'un URI de contenu. Android Le composant FileProvider génère des URI de contenu pour en fonction des spécifications que vous fournissez en XML. Cette leçon vous explique comment ajouter l'implémentation de FileProvider dans votre application, et comment spécifiez les fichiers que vous souhaitez proposer à d'autres applications.

Remarque:La classe FileProvider fait partie du Bibliothèque AndroidX Core. Pour plus d'informations sur l'inclusion de cette bibliothèque dans votre application, consultez Déclarer des dépendances.

Spécifier le FileProvider

La définition d'un FileProvider pour votre application nécessite une entrée dans votre fichier manifeste. Cette entrée spécifie l'autorité à utiliser pour générer des URI de contenu, ainsi que le nom d'un fichier XML spécifiant les répertoires que votre application peut partager.

L'extrait de code suivant vous montre comment ajouter à votre fichier manifeste L'élément <provider> spécifiant la FileProvider, l'autorité et le Nom du fichier XML:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
        ...>
        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.example.myapp.fileprovider"
            android:grantUriPermissions="true"
            android:exported="false">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths" />
        </provider>
        ...
    </application>
</manifest>

Dans cet exemple, l'attribut android:authorities spécifie l'autorité d'URI que vous souhaitez utiliser pour les URI de contenu générés par FileProvider Dans cet exemple, l'autorité est com.example.myapp.fileprovider. Pour le vôtre de l'application, spécifiez une autorité composée de l'autorité Valeur android:package avec la chaîne "fileprovider" qui lui est ajoutée. Pour en savoir plus sur la valeur "authority", consultez la rubrique URI de contenu et la documentation relative aux android:authorities.

L'élément enfant <meta-data> de <provider> pointe vers un fichier XML qui spécifie les répertoires que vous souhaitez partager. L'attribut android:resource correspond au chemin d'accès et au nom du fichier, sans L'extension .xml.Le contenu de ce fichier est décrit dans la section suivante.

Spécifier des répertoires partageables

Une fois que vous avez ajouté FileProvider au fichier manifeste de votre application, vous devez spécifier les répertoires qui contiennent les fichiers que vous souhaitez partager. Pour spécifier le paramètre commencez par créer le fichier filepaths.xml dans le répertoire res/xml/. sous-répertoire de votre projet. Dans ce fichier, spécifiez les répertoires en ajoutant un élément XML pour chaque répertoire. L'extrait de code suivant montre un exemple du contenu de res/xml/filepaths.xml L'extrait montre également comment partager un sous-répertoire du répertoire files/ dans votre espace de stockage interne:

<paths>
    <files-path path="images/" name="myimages" />
</paths>

Dans cet exemple, la balise <files-path> partage des répertoires dans le files/ de la mémoire de stockage interne de votre application. Attribut path partage le sous-répertoire images/ de files/. name indique à FileProvider d'ajouter le segment de chemin d'accès myimages vers les URI de contenu des fichiers du sous-répertoire files/images/.

L'élément <paths> peut avoir plusieurs enfants, chacun spécifiant un élément différent à partager. En plus de l'élément <files-path>, vous pouvez Utiliser l'élément <external-path> pour partager des répertoires dans un espace de stockage externe L'élément <cache-path> pour partager les répertoires de votre cache interne . Pour en savoir plus sur les éléments enfants spécifiant les répertoires partagés, consultez le Documentation de référence sur FileProvider.

Remarque:Le fichier XML est le seul moyen de spécifier les répertoires partager ; vous ne pouvez pas ajouter un répertoire par programmation.

Vous disposez désormais d'une spécification complète pour FileProvider. qui génère les URI de contenu des fichiers du répertoire files/ de l'application la mémoire de stockage interne ou pour les fichiers des sous-répertoires de files/. Lorsque votre application génère un URI de contenu pour un fichier, il contient l'autorité spécifiée dans le élément <provider> (com.example.myapp.fileprovider), le chemin d'accès myimages/ et le nom du fichier.

Par exemple, si vous définissez un FileProvider conformément au dans cette leçon, et vous demandez un URI de contenu pour le fichier default_image.jpg, FileProvider renvoie URI suivant:

content://com.example.myapp.fileprovider/myimages/default_image.jpg

Pour en savoir plus, consultez les ressources suivantes: