android - 如何通过 Intents 打开电子邮件程序(但仅限于电子邮件程序)

标签 android

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

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)来说,这条消息完全太长了。

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

最佳答案

感谢 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. 不涉及选择器。这样做的原因是让用户利用默认值;如果他们设置了默认的电子邮件程序,那么它会直接将他们带到那里,完全绕过选择器(在我看来这似乎很好,你可能会反对)。

当然,我忽略了很多技巧(例如正确编码主题/正文),但您应该能够自己解决。

关于android - 如何通过 Intents 打开电子邮件程序(但仅限于电子邮件程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3312438/

相关文章:

android - 显示默认展开的 android 通知操作按钮

android - 水平回收器 View 不显示任何内容

android - NavigationView 中的动态菜单

android - RubyMotion - 联合 iOS/Android 开发

android - 如何在 Android Studio 2.2 中手动选择目标设备?

java - Android Linkify - 可点击的电话号码

安卓:Facebook 图表 API v1.0

java - 无法从 firebase 检索图像

android - 如何获取带有标题的日历事件,包括重复事件

android - 执行某些 SQLite 操作时为 "Failure 21 (out of memory)"