使用Android的意图多个电子邮件附件使用Android的意图多个电子邮件附件(Android m

2019-05-09 03:06发布

我一直工作在Android程序,使用意向带有附件(图像文件,音频文件等)发送电子邮件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 ,得到它与多个电子邮件附件的工作?

Answer 1:

以下是你需要创建一个包含多个附件的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..."));
}


Answer 2:

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

这对我的作品。



Answer 3:

虽然这是一个古老的线程,但它显示在顶部上的谷歌搜索我想补充一个小提示,使之完整,因此我stumpled上面。

有必要使附加的文件读取的邮件活动,否则将不能安装。 所以,你必须从某个地方打电话

fileIn.setReadable(true, false)


Answer 4:

在这里,我找到很好的例子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);


Answer 5:

对于多个附件使用PutParcelableArrayListExtra(Intent.ExtraStream, uris)其中的URI变量是一个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..."));

希望这可以帮助 ;)



文章来源: Android multiple email attachments using Intent