如何在 Android 12 的意图中包含电子邮件收件人信息?

Posted

技术标签:

【中文标题】如何在 Android 12 的意图中包含电子邮件收件人信息?【英文标题】:How to include email recipient information in intents on Android 12? 【发布时间】:2021-12-16 03:31:27 【问题描述】:

android 早期以来,我一直使用 recommended way 来填充电子邮件意图。这包括收件人、主题和正文。

然而,在 Android 12 上 - 执行此操作时,收件人字段总是被忽略,其他一切都完全相同。

这里有什么问题?这是操作系统中的错误吗?我默认使用 gmail 进行测试,但同样的事情也适用于其他电子邮件客户端,仍然仅在 Android 12 上。

private fun createIntent(
    metadata: String
): Intent 
    val uri = Uri.parse("mailto:")

    return Intent(ACTION_SENDTO)
        .setData(uri)
        .putExtra(
            EXTRA_EMAIL,
            arrayOf("example@gmail.com") //Ive also tried without arrayOf, no difference.
        )
        .putExtra(
            EXTRA_SUBJECT,
            "Feedback"
        )
        .putExtra(
            EXTRA_TEXT,
            metadata
        )

【问题讨论】:

还有 ACTION_SEND ? @blackapps 它说(在上面的链接中)包含附件时应该使用 ACTION_SEND。无附件 = ACTION_SENDTO。编辑:我仍然对此进行了测试,没有应用程序能够使用 ACTION_SEND 处理意图。 尝试将电子邮件地址放入Uri (mailto:example@gmail.com)。 EmailAddressExposedException? ;-) 我无法让@CommonsWare 工作,但我确实偶然发现了另一个解决方案 - 请在下面查看我的答案! 【参考方案1】:

似乎将ACTION_SENDselector 块结合使用可以解决问题。这适用于所有 API 级别,直到 API 21。我让其他人解释为什么会这样,但重要的是它有效。

private fun createIntent(
    metadata: String
): Intent 
    return Intent(ACTION_SEND)
        .putExtra(
            EXTRA_EMAIL,
            arrayOf(EMAIL)
        )
        .putExtra(
            EXTRA_SUBJECT,
            TITLE
        )
        .putExtra(
            EXTRA_TEXT,
            metadata
        )
        .apply 
            selector = Intent(ACTION_SENDTO).setData(Uri.parse("mailto:"))
        

【讨论】:

以上是关于如何在 Android 12 的意图中包含电子邮件收件人信息?的主要内容,如果未能解决你的问题,请参考以下文章

使用意图发送到发件箱 Android 的电子邮件

Android é 在电子邮件意图中显示为黑色菱形

如何从电子邮件意图中的回收站视图中获取两个文本视图?

Android:使用电子邮件意图发送电子邮件,可以在发送之前更改消息吗?

从android中的意图选择器中选择选项(相机或画廊)后请求权限

Android:如何获取服务接收到的意图?