Je cherche un moyen de partager correctement (et non d'OUVRIR) un fichier interne avec une application externe en utilisant la bibliothèque de support Android. Fournisseur de fichiers .
En suivant l'exemple de la documentation,
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.android.supportv4.my_files"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/my_paths" />
</provider>
et utiliser ShareCompat pour partager un fichier avec d'autres applications comme suit :
ShareCompat.IntentBuilder.from(activity)
.setStream(uri) // uri from FileProvider
.setType("text/html")
.getIntent()
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
ne fonctionne pas, car le FLAG_GRANT_READ_URI_PERMISSION n'accorde l'autorisation que pour l'Uri spécifié dans le champ data
de l'intention, et non de la valeur de la EXTRA_STREAM
supplémentaire (comme cela a été fixé par setStream
).
J'ai essayé de compromettre la sécurité en mettant android:exported
a true
pour le fournisseur, mais FileProvider
vérifie en interne si elle est exportée. Si c'est le cas, elle lève une exception.
8 votes
+1 ceci semble être une question vraiment originale - il y a rien sur Google ou StackOverflow d'après ce que j'ai pu voir.
0 votes
Voici un post pour mettre en place une configuration de base de FileProvider en utilisant un projet d'exemple minimal sur Github : stackoverflow.com/a/48103567/2162226 . Il indique les étapes à suivre pour copier les fichiers (sans les modifier) dans un projet local autonome.