如何选择带有ACTION_SENDTO的电子邮件应用程序还支持附件?

时间:2015-10-13 08:57:08

标签: android email android-intent attachment

现在我正在使用ACTION_SEND但是有太多的应用程序弹出窗口供选择所以我想使用ACTION_SENDTO,但我还需要将几个文件(.zip或图像)附加到电子邮件正文以便发送,我检查了几乎所有这个网站的评论几乎没有任何帮助,任何人都可以帮助我吗?

4 个答案:

答案 0 :(得分:2)

这个答案有点晚了,但希望它会帮助那些与原始海报有同样问题的人。

以下解决方案将解决OP的两个请求(1)有选择地显示用户可以选择的应用和(2)将多个文件附加到电子邮件正文

首先,我们将解决#(2)。这是Ravi Rupareliya已经发布的解决方案的扩展。假设我们需要附加名为“file01”和“file02”的2个文件。我们会这样做:

ArrayList<Uri> uriList = new ArrayList<Uri>();
Uri uri = Uri.fromFile(new File("file01"));
uriList.add(uri);
Uri uri02 = Uri.fromFile(new File("file02"));
uriList.add(uri02);

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);
emailIntent.setType("message/rfc822");
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriList);
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, *"email title"*);
emailIntent.putExtra(Intent.EXTRA_TEXT, *"email body"*);

创建意图时,使用ACTION_SEND_MULTIPLE(而不仅仅是ACTION_SEND)表示您希望将多个文件附加到电子邮件中。此外,使用Content-Type“message / rfc822”表示正文包含使用RFC 822标准格式化的封装消息(即您的“file01”和“file02”附件)。

其次,我们将解决#(1)。我建议您在设置模块中提供一个选项,允许用户从电子邮件应用列表中选择电子邮件客户端。选定的电子邮件客户端将是用户需要发送电子邮件时启动的默认电子邮件。此提议要求用户仅从一次中选择电子邮件应用列表,而不是每次都发送电子邮件。

此电子邮件应用列表可通过以下方式获取:

Intent queryIntent = new Intent(ACTION_SENDTO);
queryIntent.setData(Uri.parse("mailto:"));
queryIntent.setType("message/rfc822");
List intentList = new ArrayList();
PackageManager packageManager = getPackageManager();
List resolveInfoList = packageManager.queryIntentActivities(queryIntent, 0);

for (int i = 0; i < resolveInfoList.size(); i++) {
    ResolveInfo resolveInfo = (ResolveInfo) resolveInfoList.get(i);
    String packageName = resolveInfo.activityInfo.packageName;
    intentList.add(packageName);
}

获得列表后,创建一个模块,让您的用户选择电子邮件应用程序(从而选择packageName)。

接下来,对于上面#(1)中的附件代码,我们只需添加以下行:emailIntent.setPackage(selectedPackageName);其中selectedPackageName(String)是用户选择的电子邮件应用程序。

电子邮件附件代码完整如下:

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);
emailIntent.setType("message/rfc822");
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriList);
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, *"email title"*);
emailIntent.putExtra(Intent.EXTRA_TEXT, *"email body"*);
emailIntent.setPackage(selectedPackageName);

答案 1 :(得分:1)

设置数据类型,以便您可以在弹出窗口中看到更少的应用。您无需使用ACTION_SENDTO

emailIntent.setType("message/rfc822");

如果您只想分享到Gmail应用,请使用此功能。

Intent emailIntent = new Intent(Intent.ACTION_SEND);
    emailIntent.setData(Uri.parse("mailto:"));    
    emailIntent.setType("message/rfc822");
    emailIntent.setPackage("com.google.android.gm"); //
    emailIntent.putExtra(Intent.EXTRA_SUBJECT,subject);
    emailIntent.putExtra(Intent.EXTRA_TEXT,body);
    emailIntent.putExtra(Intent.EXTRA_STREAM, fileuri);
    startActivity(emailIntent);

修改 这将显示所有主流电子邮件应用程序:

 Intent emailIntent = new Intent(Intent.ACTION_SEND);
        emailIntent.setData(Uri.parse("mailto:"));    
        emailIntent.setType("message/rfc822");
        emailIntent.putExtra(Intent.EXTRA_SUBJECT,subject);
        emailIntent.putExtra(Intent.EXTRA_TEXT,body);
        emailIntent.putExtra(Intent.EXTRA_STREAM, fileuri);
       startActivity(Intent.createChooser(emailIntent,"Send via"));

答案 2 :(得分:0)

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);
emailIntent.setType("plain/text");
ArrayList<Uri> listUri=new ArrayList<Uri>();

Uri URI;=Uri.fromFile(new File(filename));
listUri.add(URI);

Uri URI2;=Uri.fromFile(new File(filename2));
listUri.add(URI2);

emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, listUri);
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject");
startActivity(Intent.createChooser(emailIntent,"Send"));

答案 3 :(得分:0)

Try this ,this example for text ,if you want to send media file you just modify this code.
String strmail=messageToPost;
        strmail=strmail.replace("<html>", "");
        strmail=strmail.replace("<br/>", "");
        strmail=strmail.replace("</html>", "");
        strmail=strmail.replace("<b>", "");
        strmail=strmail.replace("</b>", "");
        //          strmail="<html>"+strmail+"</html>";
        String[] mailto = { "" };
        final Intent sendIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:")); 
        sendIntent.putExtra(Intent.EXTRA_EMAIL, mailto);
        sendIntent.putExtra(Intent.EXTRA_SUBJECT, 
                "Mail From application");

        sendIntent.putExtra( Intent.EXTRA_TEXT,strmail);
        startActivity(Intent.createChooser(sendIntent, "your app"));