如何在不发送消息的情况下在Android中打开默认电子邮件客户端?

时间:2019-01-15 11:47:43

标签: java android email android-intent kotlin

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

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

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)进行了安装。

2 个答案:

答案 0 :(得分:0)

我会组合一些东西。

  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中处理失败的案件。

答案 1 :(得分:-1)

您可以执行以下操作:

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