Android多个电子邮件附件使用意图
我一直在Android程序上使用Intent和ACTION_SEND
发送附件(图像文件,audio文件等)的电子邮件。 当电子邮件有一个附件时,该程序正在工作。 我使用Intent.putExtra(android.content.Intent.EXTRA_STREAM, uri)
将指定的图像文件附加到邮件,它工作正常,邮件可以通过Gmail传递。 但是,当我试图通过多次调用Intent.putExtra(android.content.Intent.EXTRA_STREAM, uri)
多个图像附加到相同的邮件,它失败了。 没有附件显示在电子邮件中。
我search了关于电子邮件附件的SDK文档和Android编程用户组,但找不到任何相关信息。 但是,我发现还有另一个意图常量ACTION_SEND_MULTIPLE
(可用于API级别4),可能会满足我的要求。 基于SDK文档,它只是表示它将多个数据传递给其他人,它像ACTION_SEND
一样工作,除了数据是多个的。 但是我仍然无法弄清楚这个命令的正确用法。 我试图用ACTION_SEND_MULTIPLE
声明intent,然后putExtra(EXTRA_STREAM, uri)
调用putExtra(EXTRA_STREAM, uri)
来附加多个图像,但是我得到了和以前一样的错误结果,没有附件出现在电子邮件中。
有没有人尝试过ACTION_SEND_MULTIPLE
并得到它与多个电子邮件附件的工作?
这里是你需要创build一个包含多个附件的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);
这对我有用。
虽然这是一个古老的线程,但因为它显示在谷歌search的顶部,我想添加一个小提示,使其完成,因此我瘫痪了。
有必要使附件中的邮件活动可读,否则不会附加。 所以你必须打电话给某个地方
fileIn.setReadable(true, false)
在这里我find了很好的例子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)
,其中urisvariables是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..."));
希望这可以帮助 ;)