我使用Intent.ACTION_SEND
发送电子邮件。但是,当我拨打intent
时,它会显示发送信息,发送电子邮件以及通过蓝牙发送的选项。我希望它只显示发送电子邮件的选项。我怎样才能做到这一点?使用Android Intent.ACTION_SEND发送电子邮件
回答
Intent email = new Intent(android.content.Intent.ACTION_SEND);
email.setType("application/octet-stream");
编辑:
你可以尝试设置类型"message/rfc822"
为好。
试试这个....
第一种解决方法:试着在你的Intent参数中更具体。添加邮件收件人例如
emailIntent .putExtra(android.content.Intent.EXTRA_EMAIL, new String[] {"[email protected]"});
解决方法二:使用package manager找到能够发送邮件的所有应用程序,并选择您要使用的只有这些。
@Ganapathy:尝试显示Gmail的
Intent gmail = new Intent(Intent.ACTION_VIEW);
gmail.setClassName("com.google.android.gm","com.google.android.gm.ComposeActivityGmail");
gmail.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" });
gmail.setData(Uri.parse("[email protected]"));
gmail.putExtra(Intent.EXTRA_SUBJECT, "enter something");
gmail.setType("plain/text");
gmail.putExtra(Intent.EXTRA_TEXT, "hi android jack!");
startActivity(gmail);
使用message/rfc822
类型指出此验证码:ACTION_SEND force sending with email解决问题。
这会帮助你。
On your button click :
Intent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
email.putExtra(Intent.EXTRA_SUBJECT, "subject");
email.putExtra(Intent.EXTRA_TEXT, "message");
email.setType("message/rfc822");
startActivity(Intent.createChooser(email, "Choose an Email client :"));
我没有拿这个答案的功劳,但我相信它给出了这篇文章的最佳答案。
使用text/plain或text/html是一种常见的误解。这将触发任何可以处理纯文本或HTML文本文件而无需任何上下文的应用程序,包括Google Drive,Dropbox,Evernote和Skype。
改用ACTION_SENDTO
,提供mailto:
乌里
intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"));
然后,您可以使用选择器通过其他答案建议进行。
回答@PaulLammertsma这里 Android email chooser
最好的代码来限制它只能发送电子邮件。将此类型设置为仅发送电子邮件。 i.setType("message/rfc822");
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL , new String[]{"[email protected]"});
i.putExtra(Intent.EXTRA_SUBJECT, "subject of email");
i.putExtra(Intent.EXTRA_TEXT , "body of email");
try {
startActivity(Intent.createChooser(i, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(Firstclass.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}
我注意到,这是一个很老的问题,但它是第一个结果为“发送邮件”的解决方案进行搜索时,所有答案都有一个共同的问题:
使用Intent.ACTION_SEND
和intent.setType("message/rfc822")
会导致选择器不仅显示邮件应用程序,还会显示所有可通过message/rfc822处理任何 MIME类型支持的应用程序,例如.mhtml
,.mht
,.mime
。除了邮件应用程序,这可能是Google Drive,Dropbox,Evernote等。
我发现将选择器限制为仅适用于邮件应用程序的唯一解决方案是使用Intent。ACTION_SENDTO代替:
Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto","[email protected]", null));
intent.putExtra(Intent.EXTRA_SUBJECT, "My Mail");
intent.putExtra(Intent.EXTRA_TEXT , "My Message");
try {
startActivity(Intent.createChooser(i, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(MainActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}
这是杰克Dsilva和Jignesh Mayani解决方案的组合:
try
{
Intent gmailIntent = new Intent(Intent.ACTION_SEND);
gmailIntent.setType("text/html");
final PackageManager pm = _activity.getPackageManager();
final List<ResolveInfo> matches = pm.queryIntentActivities(gmailIntent, 0);
String gmailActivityClass = null;
for (final ResolveInfo info : matches)
{
if (info.activityInfo.packageName.equals("com.google.android.gm"))
{
gmailActivityClass = info.activityInfo.name;
if (gmailActivityClass != null && !gmailActivityClass.isEmpty())
{
break;
}
}
}
gmailIntent.setClassName("com.google.android.gm", gmailActivityClass);
gmailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" });
gmailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
gmailIntent.putExtra(Intent.EXTRA_CC, "[email protected]"); // if necessary
gmailIntent.putExtra(Intent.EXTRA_TEXT, "Email message");
gmailIntent.setData(Uri.parse("[email protected]"));
this._activity.startActivity(gmailIntent);
}
catch (Exception e)
{
Intent i = new Intent(Intent.ACTION_SEND);
i.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" });
i.putExtra(Intent.EXTRA_SUBJECT, "Subject");
i.putExtra(Intent.EXTRA_CC, "[email protected]"); // if necessary
i.putExtra(Intent.EXTRA_TEXT, "Email message");
i.setType("plain/text");
this._activity.startActivity(i);
}
因此,在首先它会尝试打开Gmail应用程序,并在情况下,用户没有它那么第二种方法将被执行。
我和我的应用程序有类似的问题。我最近发现这个链接形式的官方Android开发人员网站,真的有帮助! Common Intents: Email
TL; DR:
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:"));
现在,你将只显示电子邮件客户端!
您可以通过这样添加主题和正文:
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Body");
[解决方案API等级> = 15]
我终于succeded在发送电子邮件带有附件的仅电子邮件客户端。 我写在这里,因为它花了我很多时间,对别人来说可能是有用的。
的问题是:
Intent.ACTION_SENDTO需要数据URI(所以你可以指定 “电子邮件地址:” 模式),但它不接受意向:EXTRA_STREAM。
Intent.ACTION_SEND接受意向:EXTRA_STREAM(这样你就可以添加 附件),但只需要键入(不包括Data URI所以你不能 指定“电子邮件地址:”模式)。
所以Intent.ACTION_SEND允许用户从几个活动可供选择,即使你的setType(“信息/ RFC822”),因为该应用程序/活动可以管理所有文件类型(tipically的GDrive/Dropbox的应用程序)等甚至是电子邮件文件。
解决方案在setSelector方法中。 使用此方法,您可以使用Intent.ACTION_SENDTO来选择活动,但然后发送Intent.ACTION_SEND Intent。
这里我的解决方案代码(附件来自一个FileProvider,但它可以是任何文件):
{
Intent emailSelectorIntent = new Intent(Intent.ACTION_SENDTO);
emailSelectorIntent.setData(Uri.parse("mailto:"));
final Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
emailIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
emailIntent.setSelector(emailSelectorIntent);
Uri attachment = FileProvider.getUriForFile(this, "my_fileprovider", myFile);
emailIntent.putExtra(Intent.EXTRA_STREAM, attachment);
if(emailIntent.resolveActivity(getPackageManager()) != null)
startActivity(emailIntent);
}
这救了我的一天。它直接发送复合文本消息到Gmail应用程序:
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto","togmail.com", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Report message");
emailIntent.putExtra(Intent.EXTRA_TEXT, edt_msg.getText().toString());
startActivity(Intent.createChooser(emailIntent, "Send email..."));
- 1. 分享Fb,Tw和电子邮件使用Intent.action_SEND在android
- 2. 如何使用java邮件从android发送电子邮件
- 3. 使用send_dbmail发送电子邮件表中的电子邮件
- 4. vb.NET SmtpClient无法使用电子邮件发送电子邮件
- 5. PHP发送电子邮件多次发送电子邮件
- 6. Android发送电子邮件不存在发送的电子邮件客户端
- 7. 用PHP邮件发送电子邮件()
- 8. Android在后台发送电子邮件
- 9. Android - 电子邮件发送错误
- 10. 在Android中发送电子邮件
- 11. Android。发送乘法attachement电子邮件
- 12. 发送电子邮件在Android ...
- 13. Android电子邮件发送验证
- 14. 自动发送电子邮件使用
- 15. 使用php发送电子邮件
- 16. 不使用SMTP发送电子邮件
- 17. 发送电子邮件使用MFMailComposeViewController
- 18. 使用RoR发送电子邮件
- 19. 使用ASP.NET发送电子邮件
- 20. ORACLE使用SSL发送电子邮件
- 21. 使用.NET发送电子邮件
- 22. 使用PowerPoint VBA发送电子邮件
- 23. 使用MVC发送电子邮件3
- 24. 使用django发送电子邮件
- 25. 使用OAuth发送电子邮件
- 26. 使用RMAIL发送电子邮件
- 27. 使用sendgird发送电子邮件
- 28. 使用JSP发送电子邮件
- 29. 使用EWS发送电子邮件
- 30. 发送电子邮件使用Java
WiFi和蓝牙仍然可见。 – efeyc 2012-04-03 11:44:04
如果我必须使用特殊附件类型的类型? – 2013-09-02 08:10:21
@ N-JOY为什么“application/octet-stream”,而不是“message/rfc822”? – 2013-10-22 14:52:56