Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Intent的Android多个电子邮件附件_Android_Email_Android Intent_Attachment - Fatal编程技术网

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

使用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)试图

我一直在开发Android程序,使用Intent with
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”错误,此修复程序将解决所有问题。