Je cherche un moyen de partager correctement (et non OPEN) un fichier interne avec une application externe à l'aide de FileProvider de la bibliothèque de support Android .
En suivant l'exemple sur 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 en utilisant 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, puisque FLAG_GRANT_READ_URI_PERMISSION n'accorde la permission que pour l'URI spécifié sur l'intent data
, pas la valeur de l' EXTRA_STREAM
extra (comme a été défini par setStream
).
J'ai essayé de compromettre la sécurité en définissant android:exported
sur true
pour le fournisseur, mais FileProvider
vérifie en interne si lui-même est exporté, quand c'est le cas, il lève une exception.