AndroidサポートライブラリのFileProviderを使用して、内部ファイルを外部アプリケーションと正しく(OPENではなく)共有する方法を探しています。
ドキュメントの例に従って、
<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 data
はインテントので指定されたUriにのみ許可を与えるので機能しません。EXTRA_STREAM
エクストラの値ではなく(によって設定されたようにsetStream
)許可します。
プロバイダーandroid:exported
にtrue
を設定してセキュリティを危険にさらそうとしましたがFileProvider
、それ自体がエクスポートされているかどうかを内部で確認しました。