【问题标题】:How to open default email client in Android, without sending a message?如何在不发送消息的情况下在 Android 中打开默认电子邮件客户端?
【发布时间】:2019-06-09 10:15:15
【问题描述】:

我正在寻找一种在 Android 上打开默认电子邮件应用程序的方法,但不使用它来发送消息。我知道我可以使用mailto:// 或意图参数来做到这一点,但这会自动打开新的消息屏幕。我想要归档的只是打开应用程序本身。

到目前为止,我已经尝试过

override fun startEmailApplication() {
    val intent = Intent(Intent.ACTION_MAIN)
    intent.addCategory(Intent.CATEGORY_APP_EMAIL)
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    startActivity(intent)
}

但每次我得到

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW cat=[android.intent.category.APP_EMAIL] flg=0x10000000 }

通过安装电子邮件应用程序(AquaMail、Outlook)。

【问题讨论】:

  • 这不是你现在使用CATEGORY_APP_EMAIL的方式。见the documentation。您应该将其与makeMainSelectorActivity() 一起使用。在最近的一个项目中,我们试图做您正在寻找的事情(转到用户电子邮件应用程序的收件箱),但我们放弃了这项工作,因为从根本上不可靠。

标签: java android email android-intent kotlin


【解决方案1】:

我会在一些小事上使用组合。

  1. 检测给定 Intent 的响应包:

    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setType("text/plain");
    List<ResolveInfo> resolveInfos = getPackageManager().queryIntentActivities(intent, 0);
    boolean canResolve = resolveInfos.size() > 0; 
    

这将列出响应此类 Intent 的可用包。使用queryIntentActivities() 允许我检索ResolveInfo,它会公开有关应用程序的更多信息。

  1. 选择第一个并使用它的 packageName 打开它:

    if (resolveInfos.size() > 0) {
        startActivity(getPackageManager().getLaunchIntentForPackage(resolveInfos.get(0).resolvePackageName))
    }
    

您也不会收到ActivityNotFoundException,因为我们事先会检查是否有某些内容会回复我们的Intent。请随时在else 中处理失败的案例。

【讨论】:

    【解决方案2】:

    您可以执行以下操作:

    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_APP_EMAIL);
    getActivity().startActivity(intent);
    

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 2020-04-21
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      相关资源
      最近更新 更多