クラウド ストレージ サービスに接続するファイル ピッカーを作成しようとしています。他のアプリケーションにファイルを添付するのに問題はありません。Gmail でさえ、Activity の結果を正常に取得し、設定した URI / クリップデータに基づいて適切なサムネイルを表示します。
問題は、実際にメールを送信しようとすると、Gmail がユーザーに「添付ファイルを送信できませんでした」と通知し、添付ファイルなしでメールを送信することです。
何が間違っているのかわかりません。URI を Intent.setData() として設定するだけでなく、URI を使用して Intent.setClipData() を設定しようとしました。さらに、FLAG_GRANT_READ_URI_PERMISSION のフラグを明示的に含めてみました。これらのどれも問題を解決しません。
何がうまくいかないのか知っている人は、声をかけてください。他のクラウド プロバイダーは、このフローでコンテンツを添付する際に問題がないように見えるので、自分が何を間違っているのかわかりません。
現在、私のコードは大まかに次のようになっていますが、Gmail ではまだ動作しません。
Intent result = new Intent();
result.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
result.setData(uri);
if (getActivity().getIntent().getBooleanExtra(Intent.EXTRA_ALLOW_MULTIPLE, false)) {
String mime = Utils.getMimeType(document);
result.setClipData(new ClipData(document.getSimpleName(), new String[]{mime}, new ClipData.Item(uri)));
result.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
result.putExtra(Intent.EXTRA_STREAM, uri);
}
getActivity().setResult(Activity.RESULT_OK, result);
getActivity().finish();