如何通过意图打开电子邮件程序(但仅通过电子邮件程序)

问题描述 投票:73回答:10

我想设置我的应用程序的一部分,允许用户向其他用户发送快速电子邮件。设置起来并不难:

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很有趣,甚至蓝牙也成为发送此消息的可行选择。对于其中一些消息(特别是Twitter),消息完全太长。

是否可以将选择器限制为仅支持长消息的应用程序(例如电子邮件)?还是有办法检测用户选择的应用并适当调整消息?

android
10个回答
82
投票

更改MIME类型就是答案,这就是我在应用中更改相同行为的方式。我使用了intent.setType("message/rfc822");


-1
投票

仅发送电子邮件给客户-有多个附件


90
投票

由于Pentium10建议搜索Linkify的工作原理,所以我找到了解决此问题的好方法。基本上,您只需创建“ mailto:”链接,然后为此调用适当的Intent。

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

此解决方案有一些有趣的方面:​​

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

  2. 因为这是一个“共享”链接,所以我只是不包含电子邮件地址-即使这是一个mailto链接。有效。

  3. 没有选择器。这样做的原因是让用户利用默认值。如果他们已经设置了默认的电子邮件程序,那么它将直接带给他们,完全绕过选择器(在我看来,这似乎很好,您可能会反驳)。

  4. 当然,我遗漏了很多技巧(例如正确编码主题/身体),但是您应该能够自己弄清楚。


28
投票

这对我有用


4
投票

您是否尝试过包含Intent.EXTRA_EMAIL额外内容?


1
投票

这有点打错,因为您需要切换模仿类型:


1
投票

尝试这个


0
投票

尝试将MIME类型从普通更改为邮件


0
投票

尝试此选项:


0
投票

这些解决方案都不适合我。感谢开源开发人员,cketti分享了他/她的简洁明了的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.