关于android:发送电子邮件意图

Send Email Intent

上面的代码打开一个显示以下应用程序的对话框:蓝牙、谷歌文档、雅虎邮箱、Gmail、Orkut、Skype等。

实际上,我想过滤这些列表选项。我只想显示与电子邮件相关的应用程序,如Gmail、Yahoo Mail。怎么做?

我在"android market"应用程序上看到过这样的例子。

  • 开放Android市场应用程序
  • 打开开发人员指定其电子邮件地址的任何应用程序。(如果你找不到这样的应用,请打开我的应用程序:market://details?id=com.becomputer06.vehicle.diary.free,或按"车辆日志"搜索)
  • 向下滚动到"开发者"
  • 单击"发送电子邮件"
  • 该对话框仅显示电子邮件应用程序,如Gmail、Yahoo Mail等。它不显示蓝牙、Orkut等。是什么代码生成这样的对话框?


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

    希望这有帮助。

    更新:根据marcwjj的说法,在4.3版中,我们需要传递字符串数组,而不是电子邮件地址的字符串,以使其正常工作。我们可能需要再添加一行:

    参考链接


    主要有三种方法:

    1。海关Uri号:

    2。使用Intent附加:

    三。支持库ShareCompat


    当你改变你的意图.settype,如下所示,你会得到

    使用android.content.Intent.ACTION_SENDTO只获取没有Facebook或其他应用程序的电子邮件客户端列表。只有电子邮件客户。前任:

    我不建议你直接进入电子邮件应用程序。让用户选择他最喜欢的电子邮件应用程序。不要拘束他。

    如果您使用action_sendto,PutExtra将无法向意图添加主题和文本。使用uri添加主题和正文文本。

    编辑:我们可以使用message/rfc822而不是"text/plain"作为mime类型。但是,这并不表示"只提供电子邮件客户机"——它表示"提供任何支持message/rfc822数据的服务"。这很容易包括一些不是电子邮件客户端的应用程序。

    message/rfc822支持.mhtml, .mht, .mime的mime类型


    这是从android官方文件引用的,我已经在android 4.4上测试过了,并且工作得很好。更多示例请访问https://developer.android.com/guide/components/intents common.html电子邮件


    虽然我找到了一个可以帮助其他人的解决方案,但回答得晚了:

    这是我的输出(仅建议Gmail+收件箱):

    my output

    我从Android开发者网站上得到了这个解决方案。


    尝试:


    这对我很有用:

    即使用ACTION_SENDTO动作而不是ACTION_SEND动作。我在几个Android 4.4设备上尝试过,它将选择器弹出窗口限制为仅显示电子邮件应用程序(电子邮件、Gmail、雅虎邮箱等),并将电子邮件地址和主题正确插入电子邮件。


    这是根据android开发者文档来实现的方法。将这些代码行添加到应用程序中:

    如果要添加正文和主题,请添加此


    如果只需要电子邮件客户机,则应使用带数组的android.content.Intent.EXTRA_EMAIL。下面是一个例子:


    最后想出最好的办法


    以下代码对我很有用。


    编辑:不再使用新版本的Gmail

    这是我当时唯一能让它和任何角色一起工作的方法。

    Doreamon的答案是正确的,因为它适用于Gmail新版本中的所有字符。

    旧答案:

    这是我的。它似乎适用于所有Android版本,支持主题和消息正文,支持完整的UTF-8字符:


    适用于所有Android版本:


    这些解决方案都不适合我。这是一个对棒棒糖有效的最小解决方案。在我的设备上,只有Gmail和本地电子邮件应用程序出现在结果选择器列表中。


    这对我来说非常好:


    以下代码对我有效!!


    这些答案中的大多数只适用于不发送附件的简单情况。在我的情况下,有时我需要发送附件(action_send)或两个附件(action_send_multiple)。

    所以我从这条线索中选择了最好的方法,并将它们结合起来。它使用的是支持库的ShareCompat.IntentBuilder,但我只显示与"mailto:uri"匹配的应用程序。通过这种方式,我只获得带有附件支持的电子邮件应用程序列表:


    如果您想确保您的意图仅由电子邮件应用程序(而不是其他短信或社交应用程序)处理,则使用ACTION_SENDTO操作并包括"mailto:"数据方案。例如:

    我在https://developer.android.com/guide/components/intents common.html电子邮件中找到了这个。


    如果你想以Gmail为目标,那么你可以做以下的事情。请注意,目的是"actionu sendto",而不是"actionu send",并且gmail不需要额外的目的字段。


    也许你应该试试这个:intent.setType("plain/text");

    我在这里找到的。我在我的应用程序中使用过它,它只显示电子邮件和Gmail选项。


    This code is working in my device


    使用此:

    使用生成渐变:


    这就是我所用的,它对我有用:

    这也将允许用户选择他们喜欢的电子邮件应用程序。唯一不允许你做的就是设置收件人的电子邮件地址。


    在科特林如果有人在找


    我在更新阿迪尔在科特林的答案,


    来自Android开发者文档:


    在电话电子邮件客户端撰写电子邮件:


    使用EDOCX1[1]确实有效,但它显示了不必处理电子邮件的额外应用程序(如gdrive)。使用Intent.ACTION_SENDTOsetType("text/plain")是最好的,但是你必须添加setData(Uri.parse("mailto:"))才能获得最好的结果(只有电子邮件应用程序)。完整代码如下:


    使用安科-科特林



    仅发送到电子邮件客户端-带有多个附件

    有很多解决方案,但都是部分有效的。

    mailto正确过滤电子邮件应用程序,但它无法不发送流/文件。

    message/rfc822与电子邮件客户端一起打开地狱般的应用程序

    所以,解决这个问题的方法是同时使用两者。

  • 首先使用mailto意图解决意图活动
  • 然后将数据设置为每个解析为发送所需数据的活动
  • 构建所需的数据意图,其中包含要共享的所需数据

    用于根据查询意图筛选所需意图的utitlity类