You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 12 ACTION_SENDTO Intent附加参数异常原因及Java修复方法

异常原因

Android 12对隐式Intent的匹配和参数传递规则做了收紧调整:当直接使用ACTION_SENDTO发起邮件发送请求时,系统仅会传递符合mailto: URI格式规范内的参数,单独通过putExtra()添加的EXTRA_SUBJECT、EXTRA_TEXT、EXTRA_EMAIL等额外参数会被系统过滤,不会传递给最终被调起的邮件客户端,因此编辑界面无法显示对应内容。该规则是Android 12新增的权限/隐私限制逻辑,更低版本的系统无此限制,因此旧代码在老版本运行正常。

Java 修复方案

修复逻辑为使用ACTION_SEND承载所有邮件相关的额外参数,再通过selector指定仅匹配支持mailto:协议的邮件类应用,既可以保证所有参数正常传递,也能避免匹配到社交软件、文件传输工具等非邮件类应用。
示例代码如下:

import android.content.Intent;
import android.net.Uri;

// 常量可根据业务需求自行定义
private static final String EMAIL = "target@example.com";
private static final String TITLE = "自定义邮件标题";

public Intent createEmailSendIntent(String content) {
    // 用ACTION_SEND承载所有自定义参数
    Intent sendIntent = new Intent(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{EMAIL});
    sendIntent.putExtra(Intent.EXTRA_SUBJECT, TITLE);
    sendIntent.putExtra(Intent.EXTRA_TEXT, content);
    // 配置selector筛选仅支持邮件协议的应用
    Intent selector = new Intent(Intent.ACTION_SENDTO);
    selector.setData(Uri.parse("mailto:"));
    sendIntent.setSelector(selector);
    
    return sendIntent;
}
注意事项
  • 该方案同时兼容Android 12以上及以下所有系统版本,无需额外做版本分支判断
  • 不要使用设置type = "message/rfc822"的方式筛选邮件应用,该方式匹配精度低,会出现大量非邮件类应用出现在选择列表中

内容的提问来源于stack exchange,提问作者AndreaF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:06:03