102

私は Android プログラムで Intent with ACTION_SEND. 電子メールに単一の添付ファイルがある場合、プログラムは機能しています。指定した画像ファイルをメールに添付して使用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)て複数の画像を添付しようとしましたが、以前と同じ誤った結果が得られ、添付ファイルはメールに表示されません。

ACTION_SEND_MULTIPLE複数の電子メールの添付ファイルを試して動作させた人はいますか?

4

5 に答える 5

189

複数の添付ファイルを含む 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..."));
}
于 2010-07-21T14:45:04.570 に答える
31

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);

これは私にとってはうまくいきます。

于 2011-01-05T19:50:21.990 に答える
20

これは古いスレッドですが、Google検索で一番上に表示されるので、それを完成させるための小さなヒントを追加したいので、つまずきました。

添付ファイルをメール アクティビティ用に読み取り可能にする必要があります。そうしないと、添付されません。だからどこかに電話しなきゃ

fileIn.setReadable(true, false)
于 2013-02-22T10:42:03.600 に答える
19

Here I found great example http://www.blackmoonit.com/2010/02/filebrowser-send-receive-intents/

you must use

final Intent aIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
aIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,theUris);
aIntent.setType(theOverallMIMEtype);
于 2010-04-03T21:52:37.497 に答える
3

複数の添付ファイルの場合PutParcelableArrayListExtra(Intent.ExtraStream, uris)、uris 変数が a である場所を使用します。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..."));

お役に立てれば ;)

于 2016-09-13T07:09:48.307 に答える