我一直在研究Android程序,使用Intent发送包含附件(图像文件,音频文件等)的电子邮件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
并使用多个电子邮件附件?
Here is the code you need to create an emailIntent that contains multiple attachments.
public static void email(Context context, String emailTo, String emailCC, String subject, String emailText, ListfilePaths) { //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 uris = new ArrayList (); //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");
其次是:
ArrayListuris = new ArrayList (); 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);
这适合我.
虽然这是一个老线程,但由于它在谷歌搜索的顶部显示,我想添加一个小提示,使其完成,因此我弄乱了它.
必须使附加文件对邮件活动可读,否则将不会附加它们.所以你必须在某个地方打电话
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);