Android Partage d'un fichier


Exemple

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.

  1. Créez un nouveau fichier XML qui contiendra les chemins, par exemple res / xml / filepaths.xml

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