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_PERMISSIONdata
はインテントの で指定された Uri の許可のみを付与し、EXTRA_STREAM
エクストラの値 (によって設定されたものsetStream
) を付与しないため、機能しません。
プロバイダーを に設定android:exported
してセキュリティを侵害しようとしましたが、それ自体がエクスポートされているかどうかを内部的にチェックし、エクスポートされている場合は例外をスローします。true
FileProvider