Я ищу способ правильно разделить (не OPEN) внутренний файл с внешним приложением с помощью библиотеки поддержки Android FileProvider.
Следуя примеру документов,
<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
extra (как было установлено setStream
).
Я попытался скомпрометировать безопасность, установив android:exported
в true
для провайдера, но FileProvider
внутренне проверяет, будет ли он сам экспортироваться, когда это делает, оно выдает исключение.