如何通过Intents打开电子邮件程序(但只有一个电子邮件程序)

我想设置我的应用程序的一部分,允许用户发送一个快速的电子邮件给另一个用户。 设置这个不是很难:

Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_SUBJECT, subject); intent.putExtra(Intent.EXTRA_TEXT, message); Intent mailer = Intent.createChooser(intent, null); startActivity(mailer); 

然而,问题在于ACTION_SEND不仅仅被电子邮件程序所接受 – 例如,在我的手机上,Facebook应用程序,Twitter,reddit是有趣的,甚至蓝牙也可以作为发送这个信息的可行select。 这些消息对于其中的一些(特别是Twitter)来说太长了。

有没有办法将select器限制为仅支持长消息的应用程序(如电子邮件)? 或者有没有办法来检测用户select的应用程序,并适当调整消息?

更改MIMEtypes是答案,这是我在我的应用程序中改变相同的行为。 我用intent.setType("message/rfc822");

感谢Pentium10提供的关于Linkify如何工作的build议,我发现了一个很好的解决scheme。 基本上,你只要创build一个“mailto:”链接,然后调用适当的意图:

 Intent intent = new Intent(Intent.ACTION_VIEW); Uri data = Uri.parse("mailto:?subject=" + subject + "&body=" + body); intent.setData(data); startActivity(intent); 

这个解决scheme有一些有趣的方面:

  1. 我正在使用ACTION_VIEW操作,因为这更适合于“mailto:”链接。 您可以不提供特定的操作,但是可能会得到一些不令人满意的结果(例如,它会询问您是否要将链接添加到联系人)。

  2. 由于这是一个“共享”链接,我只是简单地包括没有电子邮件地址 – 即使这是一个mailto链接。 有用。

  3. 没有select者参与。 原因是让用户利用默认值; 如果他们已经设置了一个默认的电子邮件程序,那么它会把他们直接转到那个,完全绕过select器(这在我看来很好,你可能会争辩)。

当然,我有很多的技巧,比如正确地编码主题或者身体,但是你应该能够自己解决这个问题。

这对我有效

 Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); emailIntent.setType("vnd.android.cursor.item/email"); emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] {"abc@xyz.com"}); emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "My Email Subject"); emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "My email content"); startActivity(Intent.createChooser(emailIntent, "Send mail using...")); 

你有没有尝试包括Intent.EXTRA_EMAIL额外?

 Intent mailer = new Intent(Intent.ACTION_SEND); mailer.setType("text/plain"); mailer.putExtra(Intent.EXTRA_EMAIL, new String[]{"name@email.com"}); mailer.putExtra(Intent.EXTRA_SUBJECT, subject); mailer.putExtra(Intent.EXTRA_TEXT, bodyText); startActivity(Intent.createChooser(mailer, "Send email...")); 

这可能会限制可用接收器应用程序的列表…

这是一个错字,因为你需要切换你的mimetype:

 intent.setType("plain/text"); //Instead of "text/plain" 

尝试将MIMEtypes从普通更改为消息

 intent.setType("text/message"); 

试试这个选项:

 Intent intentEmail = new Intent(Intent.ACTION_SEND); intentEmail.setType("message/rfc822");