Android(Flutter插件)添加联系人时姓名字段为空问题排查
解决Android联系人编辑界面结构化姓名字段为空的问题
问题原因
使用ContactsContract.Intents.Insert.ACTION的Intent传递结构化姓名(StructuredName)数据时,系统需要额外触发条件才能识别加载这些字段,仅传递DATA ArrayList不足以让编辑界面显示姓名的各个组成部分。
修复步骤
为结构化姓名添加
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);设置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类型调整Intent的Type
将Intent的Type从ContactsContract.Contacts.CONTENT_TYPE改为ContactsContract.RawContacts.CONTENT_TYPE,确保指向正确的联系人数据类型。
验证
修改完成后启动Intent,联系人编辑界面应正确填充GIVEN_NAME、MIDDLE_NAME和FAMILY_NAME字段,同时保留用户编辑权限。
内容的提问来源于stack exchange,提问作者Bart Vermeulen
相关产品推荐
相关产品推荐

