当前位置:  开发笔记 > Android > 正文

使用Intent的Android多个电子邮件附件

如何解决《使用Intent的Android多个电子邮件附件》经验,为你挑选了4个好方法。

我一直在研究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并使用多个电子邮件附件?



1> gregm..:

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


正确的MIME数据类型应该是"text/plain"而不是"plain/text":`emailIntent.setType("text/plain");`.如果您使用"普通/文本"Android将强制使用GMail作为发件人,但如果您使用"text/plain",它将提供与Gmail,Facebook,蓝牙等的应用程序选择器对话框.如果您只想提议邮件程序请改用"text/xml".
如果您将最后一行更改为`context.startActivity(emailIntent);`应用程序选择器对话框中将出现"默认使用此操作"复选框,因此用户将能够选择用于发送多个电子邮件的默认应用程序附件.
你忘了把主题和emailText放到意图中.否则,谢谢你的代码.
这个例子让我知道"AndroidRuntimeException:从Activity上下文调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志.这真的是你想要的吗?" 我已经尝试将Application和基本上下文传递给这个电子邮件方法,并且都导致相同的错误.

2> 小智..:

ACTION_SEND_MULTIPLE 应该是行动

然后 emailIntent.setType("text/plain");

其次是:

ArrayList uris = 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);

这适合我.



3> 小智..:

虽然这是一个老线程,但由于它在谷歌搜索的顶部显示,我想添加一个小提示,使其完成,因此我弄乱了它.

必须使附加文件对邮件活动可读,否则将不会附加它们.所以你必须在某个地方打电话

fileIn.setReadable(true, false)



4> printminion..:

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

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有