web-dev-qa-db-ja.com

Android Intentを使用した複数のメール添付ファイル

_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_を試してみて、複数の電子メール添付ファイルで動作しましたか?

97
yyyy1234

以下は、複数の添付ファイルを含む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..."));
}
184
gregm

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

これは私のために動作します。

28
santhana

これは古いスレッドですが、グーグル検索の一番上に表示されているように、小さなヒントを追加して完了させるため、私はそれにhenceしています。

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

fileIn.setReadable(true, false)
19
thomas

ここで私は素晴らしい例を見つけました 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);
18
printminion

複数の添付ファイルの場合、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..."));

お役に立てれば ;)

2