【问题标题】: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 中解决问题的正确方法是什么?

【问题讨论】:

    标签: java android android-intent android-12


    【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      • 2015-08-31
      • 2012-02-26
      相关资源
      最近更新 更多