在显示电子邮件列表的 Android 中启动 Gmail/Email Intent

Start Gmail / Email Intent in Android showing list of emails

我已经实现了 firebase 电子邮件 link 登录,生成邮件后我想打开 phone 的电子邮件应用程序,以便用户可以直接打开已发送的邮件.

fun startEmailApp(context: Context) {
    val emailPackage = "com.google.android.gm"
    val isGmailInstalled = isAppInstalled(context, emailPackage)

    val intent = Intent(Intent.ACTION_SEND)

    context.startActivity(Intent.createChooser(intent, "choose an email client"))

    if (isGmailInstalled) {
        intent.type = "text/html"
        intent.setPackage(emailPackage)
        context.startActivity(intent)
    } else {
        intent.type = "message/rfc822";
        context.startActivity(Intent.createChooser(intent, "choose an email client"))
    }
}

此实现将打开 gmail,但在撰写电子邮件屏幕中。我如何设法在收件箱中显示电子邮件列表?

I want to open the phone's email app

emailPackage 值将尝试打开 GMail,而不是用户选择的电子邮件应用程序。

顺便说一句,请注意您的 isAppInstalled() 可能会在 Android 11 上中断,除非您添加 <queries> 元素以将您找到 Gmail 的能力列入白名单。我们通过 PackageManager 查找其他应用程序的能力现在受到限制。

How do I manage to show the list of emails in the inbox instead?

没有要求电子邮件应用程序必须导出 activity,更不用说具有已记录和受支持的 <intent-filter>

鉴于您显然只想支持 Gmail,您可以尝试打开他们的 ACTION_MAIN/CATEGORY_LAUNCHER activity。对于启动器,将会有其中之一,并且可能用户可以从那里轻松到达他们的收件箱。

如果您想支持范围更广的电子邮件应用程序,您可以:

  • 删除 emailPackage 和使用它的代码
  • 使用 Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:")) 作为 MAIN/LAUNCHER Intent 的选择器,以显示电子邮件客户端的选择器(如果需要)

有关选择器的更多信息,请参阅 ,尽管在那种情况下他们使用它来优化 ACTION_SEND Intent.