如何在Android 12的Intent中正确传递邮件收件人信息
问题原因
Android 12及以上版本调整了邮件Intent的解析规则,并非系统Bug。
旧版本邮件客户端会同时读取EXTRA_EMAIL附加字段和mailto: URI中的收件人信息,从Android 12开始,包括Gmail在内的主流邮件客户端均优先解析mailto: URI本身携带的参数,不再主动读取EXTRA_EMAIL字段,因此出现仅收件人失效、主题和正文正常的现象。
解决方案
- 将收件人地址直接拼接在
mailto:URI中,多个收件人用英文逗号分隔 - 可同时保留
EXTRA_EMAIL字段,向下兼容Android 12以下的系统版本 - 若收件人地址包含特殊字符,建议通过Uri构造方法自动处理编码,避免解析异常
修正后的代码示例
private fun createIntent( metadata: String ): Intent { // 写法1:直接拼接收件人到URI,多个收件人用英文逗号分隔 val uri = Uri.parse("mailto:example@gmail.com") // 写法2:动态构造更稳妥,自动处理编码问题 // val targetEmail = "example@gmail.com" // val uri = Uri.parse("mailto:") // .buildUpon() // .appendPath(targetEmail) // .build() return Intent(ACTION_SENDTO) .setData(uri) // 保留该字段实现向下兼容 .putExtra(EXTRA_EMAIL, arrayOf("example@gmail.com")) .putExtra(EXTRA_SUBJECT, "Feedback") .putExtra(EXTRA_TEXT, metadata) }
内容的提问来源于stack exchange,提问作者zoltish
相关产品推荐
相关产品推荐

