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

Android(Flutter插件)添加联系人时姓名字段为空问题排查

解决Android联系人编辑界面结构化姓名字段为空的问题

问题原因

使用ContactsContract.Intents.Insert.ACTION的Intent传递结构化姓名(StructuredName)数据时,系统需要额外触发条件才能识别加载这些字段,仅传递DATA ArrayList不足以让编辑界面显示姓名的各个组成部分。

修复步骤

  1. 为结构化姓名添加IS_PRIMARY标记
    结构化姓名需要标记为主要条目,否则系统可能忽略该数据项:

    ContentValues row3 = new ContentValues();
    row3.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
    row3.put(Data.IS_PRIMARY, 1); // 添加主要条目标记
    row3.put(StructuredName.MIDDLE_NAME, "Middel naam");
    row3.put(StructuredName.FAMILY_NAME, "Familie naam");
    row3.put(StructuredName.GIVEN_NAME, "TEST");
    data.add(row3);
    
  2. 设置Intent的NAME额外参数
    即使已传递结构化姓名,仍需设置ContactsContract.Intents.Insert.NAME参数(可传入合成的姓名字符串),触发编辑界面解析并显示各个结构化字段:

    final Intent intent = new Intent(ContactsContract.Intents.Insert.ACTION);
    // 传入与结构化字段对应的合成姓名
    intent.putExtra(ContactsContract.Intents.Insert.NAME, "TEST Middel naam Familie naam");
    intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, data);
    intent.setType(ContactsContract.RawContacts.CONTENT_TYPE); // 修正为RawContacts类型
    
  3. 调整Intent的Type
    将Intent的Type从ContactsContract.Contacts.CONTENT_TYPE改为ContactsContract.RawContacts.CONTENT_TYPE,确保指向正确的联系人数据类型。

验证

修改完成后启动Intent,联系人编辑界面应正确填充GIVEN_NAME、MIDDLE_NAME和FAMILY_NAME字段,同时保留用户编辑权限。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:37:13