Я ищу способ правильно поделиться (не ОТКРЫТЬ) внутренним файлом с внешним приложением с помощью FileProvider библиотеки поддержки Android .
Следуя примеру в документации,
<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>
и с помощью ShareCompat поделиться файлом с другими приложениями следующим образом:
ShareCompat.IntentBuilder.from(activity)
.setStream(uri) // uri from FileProvider
.setType("text/html")
.getIntent()
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
не работает, поскольку FLAG_GRANT_READ_URI_PERMISSION предоставляет разрешение только для Uri, указанного в data
намерении, а не на значение EXTRA_STREAM
дополнительного (как было установлено setStream
).
Я пытался компромиссной безопасности, установив android:exported
в true
для поставщика, но FileProvider
внутренне проверяет , является ли сам по себе идет на экспорт, если это так, то бросает исключение.