使用Intent的Android多个电子邮件附件
我一直在开发Android程序,使用Intent with使用Intent的Android多个电子邮件附件,android,email,android-intent,attachment,Android,Email,Android Intent,Attachment,我一直在开发Android程序,使用Intent withACTION\u send发送带有附件(图像文件、音频文件等)的电子邮件。当电子邮件只有一个附件时,该程序正在运行。我使用Intent.putExtra(android.content.Intent.EXTRA_STREAM,uri)将指定的图像文件附加到邮件上,它工作正常,邮件可以通过Gmail发送。但是,当我多次调用Intent.putExtra(android.content.Intent.EXTRA\u STREAM,uri)试图
ACTION\u send
发送带有附件(图像文件、音频文件等)的电子邮件。当电子邮件只有一个附件时,该程序正在运行。我使用Intent.putExtra(android.content.Intent.EXTRA_STREAM,uri)
将指定的图像文件附加到邮件上,它工作正常,邮件可以通过Gmail发送。但是,当我多次调用Intent.putExtra(android.content.Intent.EXTRA\u STREAM,uri)
试图将多个图像附加到同一封邮件时,它失败了。电子邮件中未显示任何附件
我搜索了SDK文档和Android编程用户组关于电子邮件附件的信息,但找不到任何相关信息。然而,我发现还有另一个intent常量ACTION\u SEND\u MULTIPLE
(从API级别4开始提供)可能满足我的要求。基于SDK文档,它只是简单地声明它将多个数据交付给其他人,它的工作原理类似于ACTION\u SEND
,但数据是多个的。但我仍然无法找到此命令的正确用法。我试图用动作\u发送\u多个
声明意图,然后多次调用putExtra(EXTRA\u STREAM,uri)
来附加多个图像,但我得到了与以前一样的错误结果,电子邮件中没有显示任何附件
是否有人尝试过使用
操作\u发送多个并使用多个电子邮件附件进行操作?这里我找到了一个很好的例子
你必须使用
final Intent aIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
aIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,theUris);
aIntent.setType(theOverallMIMEtype);
以下是创建包含多个附件的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..."));
}
公共静态无效电子邮件(上下文上下文、字符串emailTo、字符串emailCC、,
字符串主题、字符串emailText、列表文件路径)
{
//需要“发送多个”才能获取多个附件
最终意图emailIntent=新意图(Intent.ACTION\u SEND\u MULTIPLE);
emailIntent.setType(“文本/普通”);
emailIntent.putExtra(android.content.Intent.EXTRA_电子邮件,
新字符串[]{emailTo});
emailIntent.putExtra(android.content.Intent.EXTRA_CC,
新字符串[]{emailCC});
emailIntent.putExtra(Intent.EXTRA_SUBJECT,SUBJECT);
emailIntent.putExtra(Intent.EXTRA_TEXT,emailText);
//必须是ArrayList
ArrayList URI=新的ArrayList();
//从路径转换为Android友好的包裹Uri
用于(字符串文件:文件路径)
{
File fileIn=新文件(File);
uriu=Uri.fromFile(fileIn);
添加(u);
}
emailIntent.putParcelableArrayListExtra(Intent.EXTRA\u流,URI);
context.startActivity(Intent.createChooser(emailIntent,“发送邮件…”);
}
操作\u发送\u多个
应为操作
然后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);
arraylisturis=newarraylist();
String[]filepath=新字符串[]{“sdcard/sample.png”,“sdcard/sample.png”};
用于(字符串文件:文件路径)
{
File fileIn=新文件(File);
uriu=Uri.fromFile(fileIn);
添加(u);
}
emailIntent.putParcelableArrayListExtra(Intent.EXTRA\u流,URI);
星触觉;
这对我来说很有用。虽然这是一个旧的线程,但由于它显示在谷歌搜索的顶部,我想添加一个小提示,使其完整,因此我难倒了
必须使附加的文件对邮件活动具有可读性,否则将不会附加这些文件。所以你得找个地方打电话
fileIn.setReadable(true, false)
对于多个附件,请使用PutParcelableArrayListExtra(Intent.ExtraStream,uris)
其中uris变量是List()。
下面是一个例子:
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..."));
var email=newintent(Intent.ActionSendMultiple);
email.SetType(“文本/普通”);
email.PutExtra(Intent.ExtraEmail,新字符串[]{emailTo});
email.PutExtra(Intent.extrac,新字符串[]{emailCC});
var uris=新列表();
filepath.ForEach(文件=>{
var fileIn=新文件(文件);
var uri=Android.Net.uri.FromFile(fileIn);
添加(uri);
});
email.PutParcelableArrayListExtra(Intent.ExtraStream,URI);
context.StartActivity(Intent.CreateChooser(电子邮件,“发送邮件…”);
希望这有帮助;) 我也有同样的问题。它不是工作代码。发送彩信时也存在同样的问题,可能只添加一个文件。你有其他的想法吗?你忘了把主题和电子邮件文本放在原意上。否则,感谢您的代码。正确的MIME数据类型应该是“text/plain”,而不是“plain/text”:emailIntent.setType(“text/plain”)代码>。如果您使用“纯文本”,Android将强制使用GMail作为发件人,但如果您使用“纯文本”,它将提供与GMail、Facebook、Bluetooth等的应用程序选择器对话框。如果您只想推荐邮件程序,请改为使用“文本/xml”。如果您将最后一行更改为context.startActivity(emailIntent)代码>复选框“默认情况下用于此操作”将出现在应用程序选择器对话框中,因此用户将能够选择默认应用程序来发送带有多个附件的电子邮件。此示例为我提供了一个“AndroidRuntimeException:Calling startActivity()“从活动上下文外部开始需要标志\u Activity\u NEW\u TASK标志。这真的是您想要的吗?”我已尝试将应用程序和基本上下文传递到此电子邮件方法,但两者都会导致相同的错误。为我解决了它,但我不确定我是否以一种奇怪的方式逃脱了错误,所以我将把之前的评论留给任何对此有任何想法的人。谢谢先生,邮件无法发送附件,只能发送邮件。谢谢你,伙计!没有这条线我无法发送照片哇!这个答案救了我一命。如果任何人从gmail应用程序获得“一个或多个文件未附加。限制20mb”错误,此修复程序将解决所有问题。