Android
FileProvider
Recherche…
Partage d'un fichier
Dans cet exemple, vous allez apprendre à partager un fichier avec d'autres applications. Nous allons utiliser un fichier pdf dans cet exemple, bien que le code fonctionne également avec tous les autres formats.
La feuille de route:
Spécifiez les répertoires dans lesquels les fichiers que vous souhaitez partager sont placés
Pour partager des fichiers, nous utiliserons FileProvider, une classe permettant le partage de fichiers sécurisé entre les applications. Un FileProvider ne peut partager que des fichiers dans des répertoires prédéfinis, définissons-les.
Créez un nouveau fichier XML qui contiendra les chemins, par exemple res / xml / filepaths.xml
Ajouter les chemins
<paths xmlns:android="http://schemas.android.com/apk/res/android"> <files-path name="pdf_folder" path="documents/"/> </paths>
Définir un FileProvider et le lier aux chemins de fichiers
Ceci est fait dans le manifeste:<manifest>
...
<application>
...
<provider
android:name="android.support.v4.context.FileProvider"
android:authorities="com.mydomain.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
...
</application>
...
</manifest>
Génère l'URI du fichier
Pour partager le fichier, nous devons fournir un identifiant pour le fichier. Cela se fait en utilisant un URI (Uniform Resource Identifier).// We assume the file we want to load is in the documents/ subdirectory
// of the internal storage
File documentsPath = new File(Context.getFilesDir(), "documents");
File file = new File(documentsPath, "sample.pdf");
// This can also in one line of course:
// File file = new File(Context.getFilesDir(), "documents/sample.pdf");
Uri uri = FileProvider.getUriForFile(getContext(), "com.mydomain.fileprovider", file);
Comme vous pouvez le voir dans le code, nous créons d'abord une nouvelle classe File représentant le fichier. Pour obtenir une URI, nous demandons à FileProvider de nous en obtenir un. Le second argument est important: il passe l'autorité d'un FileProvider. Il doit être égal à l'autorité du FileProvider défini dans le manifeste.
Partager le fichier avec d'autres applications
Nous utilisons ShareCompat pour partager le fichier avec d'autres applications:Intent intent = ShareCompat.IntentBuilder.from(getContext())
.setType("application/pdf")
.setStream(uri)
.setChooserTitle("Choose bar")
.createChooserIntent()
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Context.startActivity(intent);
Un sélecteur est un menu à partir duquel l'utilisateur peut choisir avec quelle application il souhaite partager le fichier. L'indicateur Intent.FLAG_GRANT_READ_URI_PERMISSION est nécessaire pour accorder une autorisation d'accès en lecture temporaire à l'URI.