添付ありの時のメーラー起動

Intent.ACTION_SENDTO で暗黙的Intent メーラーを起動する場合は、添付を付けられないので、
Intent.ACTION_SEND を使うのだが、適切なタイプを指定しないと、いろんなアプリが候補に挙がる。

<<添付なしのACTION_SENDTO を実行>>

Uri mailToUri = Uri.parse("test@test.com");
Intent intent = new Intent(Intent.ACTION_SENDTO, mailToUri);
intent.putExtra(Intent.EXTRA_SUBJECT, "メール件名");
intent.putExtra(Intent.EXTRA_TEXT, "メールの本文");
startActivity(intent);


<<添付ありのACTION_SEND を実行>>
タイプに、message/rfc822 を指定する。

Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
String[] to = {"test@test.com"};
intent.putExtra(Intent.EXTRA_EMAIL, to);
intent.putExtra(Intent.EXTRA_SUBJECT, "メール件名");
intent.putExtra(Intent.EXTRA_TEXT, "メールの本文");
// ファイルの添付
File externalSD = new File(System.getenv("EXTERNAL_STORAGE"));
Uri attachments = Uri.parse("file://" + externalSD.getAbsolutePath()+"/temp/572.jpg");
intent.putExtra(Intent.EXTRA_STREAM, attachments);

intent.setType("message/rfc822");

startActivity(Intent.createChooser(intent, "メーラーを選択してください"));

更に注意すべきことがある。

GMailなどのメーラーに添付ファイルを指定/渡すことができるのは、外付けを含めて、
SDカード上のファイルでなければならない。

自アプリで抱えるファイル、/data/data/package_name/files/ のファイルなどを添付してメール送信しようとすると、

   file:// attachment paths must point to file:///mnt/sdcard. Ignoring attachment [obscured file path]

のエラーが発生する。

SDカード上に添付するファイルを用意する必要があり、
  ContextWrapper.getExternalFilesDir(null); で、
/mnt/sdcard/data/Android/data/packagename/files/

を取得してそこに保存したファイルを attach する。

File dirFile = getExternalFilesDir(null);
File file = new File(dirFile.getAbsolutePath()+"/hoge");
   :
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));


のようにする必要がある。