通过Gmail发送电子邮件

我有一个代码火灾意图发送电子邮件

Intent i = new Intent(Intent.ACTION_SEND); i.setType("text/plain"); i.putExtra(Intent.EXTRA_EMAIL, new String[] { to }); i.putExtra(Intent.EXTRA_SUBJECT, subject); i.putExtra(Intent.EXTRA_TEXT, msg); try { startActivity(Intent.createChooser(i, "Send mail...")); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(Start.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show(); } 

但是当这个意图被解雇的时候,我在列表中看到很多项目,比如短信app,gmail app,facebook app等等。

我怎样才能过滤这个,只启用Gmail应用程序(或者只是电子邮件应用程序)?

使用android.content.Intent.ACTION_SENDTOnew Intent(Intent.ACTION_SENDTO); )只获取电子邮件客户端列表,没有Facebook或其他应用程序。 只是电子邮件客户端。

我不会build议你直接到电子邮件应用程序。 让用户select他喜欢的电子邮件应用程序。 不要限制他。

如果您使用ACTION_SENDTO,则putExtra无法将主题和文本添加到意图。 使用Uri添加主题和正文文本。

 Intent send = new Intent(Intent.ACTION_SENDTO); String uriText = "mailto:" + Uri.encode("email@gmail.com") + "?subject=" + Uri.encode("the subject") + "&body=" + Uri.encode("the body of the message"); Uri uri = Uri.parse(uriText); send.setData(uri); startActivity(Intent.createChooser(send, "Send mail...")); 

接受的答案在4.1.2上不起作用。 这应该适用于所有平台:

 Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts( "mailto","abc@gmail.com", null)); emailIntent.putExtra(Intent.EXTRA_SUBJECT, "EXTRA_SUBJECT"); startActivity(Intent.createChooser(emailIntent, "Send email...")); 

希望这可以帮助。

伊戈尔波波夫的答案是100%正确的,但如果你想要一个后备选项,我使用这种方法:

 public static Intent createEmailIntent(final String toEmail, final String subject, final String message) { Intent sendTo = new Intent(Intent.ACTION_SENDTO); String uriText = "mailto:" + Uri.encode(toEmail) + "?subject=" + Uri.encode(subject) + "&body=" + Uri.encode(message); Uri uri = Uri.parse(uriText); sendTo.setData(uri); List<ResolveInfo> resolveInfos = getPackageManager().queryIntentActivities(sendTo, 0); // Emulators may not like this check... if (!resolveInfos.isEmpty()) { return sendTo; } // Nothing resolves send to, so fallback to send... Intent send = new Intent(Intent.ACTION_SEND); send.setType("text/plain"); send.putExtra(Intent.EXTRA_EMAIL, new String[] { toEmail }); send.putExtra(Intent.EXTRA_SUBJECT, subject); send.putExtra(Intent.EXTRA_TEXT, message); return Intent.createChooser(send, "Your Title Here"); } 

这是从Android官方文档中引用的,我已经在Android 4.4上进行了testing,并且完美地工作。 通过https://developer.android.com/guide/components/intents-common.html#Email查看更多示&#x4F8B;

  public void composeEmail(String[] addresses, String subject) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse("mailto:")); // only email apps should handle this intent.putExtra(Intent.EXTRA_EMAIL, addresses); intent.putExtra(Intent.EXTRA_SUBJECT, subject); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } } 

更换

 i.setType("text/plain"); 

 // need this to prompts email client only i.setType("message/rfc822"); 
 Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts( "mailto","opinions@gmail.com.com", null)); emailIntent.putExtra(Intent.EXTRA_SUBJECT, "IndiaTV News - Mobile App Feedback"); emailIntent.putExtra(Intent.EXTRA_TEXT,Html.fromHtml(Settings.this.getString(R.string.MailContent))); startActivityForResult(Intent.createChooser(emailIntent, "Send email..."),0);