我一直工作在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
,得到它与多个电子邮件附件的工作?
以下是你需要创建一个包含多个附件的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);
这对我的作品。
虽然这是一个古老的线程,但它显示在顶部上的谷歌搜索我想补充一个小提示,使之完整,因此我stumpled上面。
有必要使附加的文件读取的邮件活动,否则将不能安装。 所以,你必须从某个地方打电话
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)
其中的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..."));
希望这可以帮助 ;)