FileProvider を使用して、アプリの内部ファイル ストレージから読み取り、電子メール (または同様のアプリ) でファイルを送信するという意図があります。このコードは、奇妙なことにプロバイダー パス自体のバージョンを電子メールの宛先リストに追加する Gmail を除いて、どこでもうまく機能するようです。
インテントを生成するコードは次のとおりです。
public static Intent getSendIntent(Uri uri) {
final Intent i = new Intent(Intent.ACTION_SEND);
i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
i.setDataAndType(uri, "message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL, new String[] { "my@email.com" });
i.putExtra(Intent.EXTRA_SUBJECT, "Export");
i.putExtra(Intent.EXTRA_TEXT, "See the attached...");
i.putExtra(Intent.EXTRA_STREAM, uri);
return i;
}
アクティビティを開始するコードは次のとおりです。
File file = new File(getFilesDir(), filename);
Uri uri = FileProvider.getUriForFile(MainActivity.this, "com.example.myapplication.provider", file);
Intent i = Utils.getSendIntent(uri);
try {
startActivity(Intent.createChooser(i, "Send file..."));
} catch (Exception e) {
Log.d(TAG, "failed to start send activity: " + e.getMessage());
Toast.makeText(MainActivity.this, "No suitable activity found for export.", Toast.LENGTH_SHORT).show();
}
Slack、Evernote などではうまく機能しますが、Gmail では、私が提供した電子メール アドレスに加えて、この種の形式の別の宛先が追加されます。
//com.example.myapplication.provider/my_files/filefile.csv
これにより、メッセージから手動で削除されるまで電子メールが送信されなくなります。メッセージに関する他のすべては期待どおりです。
これを防ぐ方法の手がかりはありますか?