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

希望这可以帮助 ;)