Android 12 ACTION_SENDTO Intent 额外异常的原因是啥?

Posted

技术标签:

【中文标题】Android 12 ACTION_SENDTO Intent 额外异常的原因是啥?【英文标题】:What is the reason of Android 12 ACTION_SENDTO intent extra anomaly?Android 12 ACTION_SENDTO Intent 额外异常的原因是什么? 【发布时间】:2021-12-21 17:59:13 【问题描述】:

android 12 中,如果您将信息添加为 主题(EXTRA_SUBJECT) 和 消息(EXTRA_TEXT),当您使用 ACTION_SENDTO Intent 发送文本电子邮件时,这些不会出现在电子邮件客户端消息中,与所有以前的版本相反。

类似Kotlin question 的用户似乎已经通过这种方式使用应用选择器解决了问题:

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:"))
        

这个问题的原因是什么?在 Java 中解决问题的正确方法是什么?

【问题讨论】:

【参考方案1】:

与所有以前的版本相反,这些不会出现在电子邮件客户端消息中

应用如何处理入站额外内容取决于应用的开发者。而且,由于 ACTION_SENDTO is not documented to have those extras,当应用忽略这些额外内容时,您不应该感到惊讶。

在 Java 中解决问题的正确方法是什么?

如果ACTION_SEND 适合您,请在 Kotlin 中做您所拥有的。 Intent 无论您在 Java、Kotlin 或任何其他合适的编程语言中使用它,其工作方式都相同。您的选择器会将您的Intent 限制为具有支持mailto: Uri for ACTION_SENDTO 的活动的应用程序(可能不仅仅是电子邮件应用程序)。

通过眼球,Java 等价物应该是这样的:

private Intent createIntent(String metadata) 
    Intent result = new Intent(ACTION_SEND)
        .putExtra(
            EXTRA_EMAIL,
            new String[]  EMAIL 
        )
        .putExtra(
            EXTRA_SUBJECT,
            TITLE
        )
        .putExtra(
            EXTRA_TEXT,
            metadata
        );
        
    result.setSelector(new Intent(ACTION_SENDTO).setData(Uri.parse("mailto:")));
       
    return result;

【讨论】:

以上是关于Android 12 ACTION_SENDTO Intent 额外异常的原因是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Android开发中怎样调用系统Email发送邮件

Android 使用Intent

Android 发送短信

android系统发送邮件

无法在android中附加文件

Android在按钮点击时自动发送短信