_ACTION_SEND
_を含むIntentを使用して、添付ファイル(画像ファイル、音声ファイルなど)を添付したメールを送信するプログラムをAndroidプログラムで作成しました。 Intent.putExtra(Android.content.Intent.EXTRA_STREAM, uri)
を使用して、指定された画像ファイルをメールに添付し、正常に機能していますが、Gmail経由でメールを配信できますが、同じメールに複数の画像を添付しようとするとIntent.putExtra(Android.content.Intent.EXTRA_STREAM, uri)
を複数回呼び出すと、動作に失敗し、メールに添付ファイルが表示されませんでした。
SDKドキュメントを検索し、Androidメールグループに関するユーザーグループのプログラミングを行いましたが、関連情報は見つかりませんでした。しかし、別のインテント定数_ACTION_SEND_MULTIPLE
_(APIレベル以降で利用可能) 4)これは私の要件を満たすかもしれません。SDKドキュメントに基づいて、複数のデータを他の誰かに配信すると、単に_ACTION_SEND
_のように機能すると述べていますが、データは複数です。 _ACTION_SEND_MULTIPLE
_を使用してインテントを宣言し、putExtra(EXTRA_STREAM, uri)
を複数回呼び出して複数の画像を添付しようとしましたが、以前と同じ誤った結果が得られました。 Eメール。
誰かが_ACTION_SEND_MULTIPLE
_を試してみて、複数の電子メール添付ファイルで動作しましたか?
以下は、複数の添付ファイルを含むemailIntentを作成するために必要なコードです。
public static void email(Context context, String emailTo, String emailCC,
String subject, String emailText, List<String> filePaths)
{
//need to "send multiple" to get more than one attachment
final Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
emailIntent.setType("text/plain");
emailIntent.putExtra(Android.content.Intent.EXTRA_EMAIL,
new String[]{emailTo});
emailIntent.putExtra(Android.content.Intent.EXTRA_CC,
new String[]{emailCC});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, emailText);
//has to be an ArrayList
ArrayList<Uri> uris = new ArrayList<Uri>();
//convert from paths to Android friendly Parcelable Uri's
for (String file : filePaths)
{
File fileIn = new File(file);
Uri u = Uri.fromFile(fileIn);
uris.add(u);
}
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
context.startActivity(Intent.createChooser(emailIntent, "Send mail..."));
}
_ACTION_SEND_MULTIPLE
_はアクションでなければなりません
そしてemailIntent.setType("text/plain");
に続く:
_ArrayList<Uri> uris = new ArrayList<Uri>();
String[] filePaths = new String[] {"sdcard/sample.png", "sdcard/sample.png"};
for (String file : filePaths)
{
File fileIn = new File(file);
Uri u = Uri.fromFile(fileIn);
uris.add(u);
}
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
startActivity(emailIntent);
_
これは私のために動作します。
これは古いスレッドですが、グーグル検索の一番上に表示されているように、小さなヒントを追加して完了させるため、私はそれにhenceしています。
添付ファイルをメールアクティビティで読み取り可能にする必要があります。そうしないと、添付ファイルは添付されません。だからあなたはどこかに電話する必要があります
fileIn.setReadable(true, false)
ここで私は素晴らしい例を見つけました http://www.blackmoonit.com/2010/02/filebrowser-send-receive-intents/
あなたは使わなければなりません
final Intent aIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
aIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,theUris);
aIntent.setType(theOverallMIMEtype);
複数の添付ファイルの場合、PutParcelableArrayListExtra(Intent.ExtraStream, uris)
where uris変数はList<IParcelable>().
を使用します。例を次に示します。
var email = new Intent(Intent.ActionSendMultiple);
email.SetType("text/plain");
email.PutExtra(Intent.ExtraEmail, new string[]{emailTo});
email.PutExtra(Intent.ExtraCc, new string[]{emailCC});
var uris = new List<IParcelable>();
filePaths.ForEach(file=> {
var fileIn = new File(file);
var uri = Android.Net.Uri.FromFile(fileIn);
uris.Add(uri);
});
email.PutParcelableArrayListExtra(Intent.ExtraStream, uris);
context.StartActivity(Intent.CreateChooser(email, "Send mail..."));
お役に立てれば ;)