Estou procurando uma maneira de compartilhar corretamente (não ABRIR) um arquivo interno com um aplicativo externo usando o FileProvider da biblioteca de suporte do Android .
Seguindo o exemplo nos documentos,
<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>
e usando o ShareCompat para compartilhar um arquivo com outros aplicativos, da seguinte maneira:
ShareCompat.IntentBuilder.from(activity)
.setStream(uri) // uri from FileProvider
.setType("text/html")
.getIntent()
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
não funciona, pois o FLAG_GRANT_READ_URI_PERMISSION concede apenas permissão para o Uri especificado na data
intenção, não o valor do EXTRA_STREAM
extra (conforme definido por setStream
).
Tentei comprometer a segurança definindo android:exported
como true
para o provedor, mas FileProvider
verifica internamente se ele próprio é exportado; nesse caso, gera uma exceção.