【问题标题】:How do I create an intent to launch any e-mail app?如何创建启动任何电子邮件应用程序的意图?
【发布时间】:2011-03-10 00:27:57
【问题描述】:

我在这里和其他地方找到了各种关于创建发送电子邮件的意图的主题,这似乎很简单。我正在寻找启动用户可能拥有的任何电子邮件客户端的意图。

这是我看到的用于发送电子邮件的代码(仅供参考,这不能满足我的需求,因为我不想发送新消息):

Intent i = new Intent(Intent.ACTION_SEND); 
i.setType("text/plain"); 
i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"recipient@example.com"}); 
i.putExtra(Intent.EXTRA_SUBJECT, "Subject of the message"); 
i.putExtra(Intent.EXTRA_TEXT   , "Body of the message"); 

这是我专门为按包名称启动 Gmail 客户端而编写的代码:

PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage("com.google.android.gm");
startActivity(intent);

上面的代码有效,但不够灵活,因为用户可能使用的不是 Gmail,而是其他内置电子邮件应用程序或第 3 方电子邮件应用程序。我正在寻找一种在这种情况下会调出选择器的意图,以便用户可以决定启动哪个应用程序来阅读电子邮件。

有谁知道如何做到这一点?

【问题讨论】:

    标签: android android-package-managers


    【解决方案1】:

    有谁知道如何完成 这个?

    没有这样的Intent——您可以通过检查电子邮件应用程序的清单来判断。

    您唯一能做的就是为自己构建一个您希望链接到的电子邮件客户端列表,并为每个客户端使用上面显示的PackageManager 代码。

    【讨论】:

    • 谢谢,看来这将是我必须走的路。您会认为这是一种常见的意图类型,将作为平台的一部分包含在内。
    • 你能告诉我如何建立自己的电子邮件客户端列表并使用 packmanager 吗?
    • @Bhargav:当然欢迎您就此提出一个单独的 Stack Overflow 问题。
    【解决方案2】:

    另一种方法可能是 Intent.createChooser();并让用户 选择正确的应用程序。

    顺便说一句,该列表不仅可以包含电子邮件应用程序

    【讨论】:

    • 感谢您提供替代方法,但这不适用于我的情况,因为我不希望用户每次都必须选择。
    【解决方案3】:

    可以以某种方式使用 mailto URL 来完成此操作吗? - 编辑 - 我能够使用以下代码示例完成此操作:

    mt = MailTo.parse("mailto:yourname@gmail.com");
    sendIntent = new Intent(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{mt.getTo()});
    sendIntent.putExtra(Intent.EXTRA_TEXT, "");
    sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Enter a subject");
    sendIntent.setType("message/rfc822");
    startActivity(Intent.createChooser(sendIntent, "Send a Message:"));
    

    【讨论】:

    • 这将发送一封电子邮件。这不是 OP 想要的。 OP 用粗体字表示,“我不想发送新消息”。
    猜你喜欢
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多