ContentProvider
アプリの内部使用のみを目的として、ストリームを使用して URI に応答するように をセットアップしました。これにより、zip ファイルを作成して提供します。
は、送信するために( ) に追加の ( )Uri
として渡されます。ただし、そうすると、次の例外で断続的に失敗します。Intent.EXTRA_STREAM
Intent
Intent.ACTION_SEND
E/DatabaseUtils(26058): java.lang.SecurityException: Permission Denial: reading MyContentProvider uri content://spinner.myapp.db/file/stream/zip/1 from pid=26141, uid=10038 requires the provider be exported, or grantUriPermission()
を通じてアクセス許可を付与しようとしましたが、うまくいきませintent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
んでした。にアクセスしているのは自分のアプリだけなので、なぜアクセス許可を付与する必要があるのか もわかりませんContentProvider
。
アップデート:
も使用してみましたがsetClipData()
、成功しませんでした。Gmail は明らかに Uri を無視し、Dropbox がクラッシュします。
String[] mimeTypes = { "application/x-compressed" };
ClipData clip = new ClipData("zip data", mimeTypes, new ClipData.Item(uri));
intent.setClipData(clip);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);