更新ContactsContract.Data
的{{1}} StructuredName
行时,我的代码会将RawContact
列设置为用户提供的值。它还使用用户提供的值更新第一个,中间的,最后一个。
从DISPLAY_NAME
取回联系人DISPLAY_NAME
时,会忽略提供给ContactsContract.Contacts
的显示名称,而Android会根据RawContact
名称制作一个名称部分。
有没有办法告诉StructuredName
使用提供的显示名称?
例如,请考虑将以下内容写入ContactsContract
行:
StructuredName
在这种情况下,我希望聚合联系人显示名称为“F L”。但是,它将是“F X L”。
以下是编写StructureName行的代码,其中为每列设置的值是成员变量:
DISPLAY_NAME: F L
GIVEN_NAME: F
MIDDLE_NAME: X
LAST_NAME: L
这是执行“ops”的代码:
protected void prepareUpdate (ArrayList<ContentProviderOperation> ops)
{
String where = ContactsContract.Data._ID + " = " + dataId;
ContentProviderOperation.Builder builder;
builder = ContentProviderOperation.newUpdate (ContactsContract.Data.CONTENT_URI);
builder.withSelection (where, null);
builder.withValue (ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
builder.withValue (ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, displayName);
builder.withValue (ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, givenName);
builder.withValue (ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, familyName);
builder.withValue (ContactsContract.CommonDataKinds.StructuredName.PREFIX, prefix);
builder.withValue (ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME, middleName);
builder.withValue (ContactsContract.CommonDataKinds.StructuredName.SUFFIX, suffix);
builder.withValue (ContactsContract.CommonDataKinds.StructuredName.PHONETIC_FAMILY_NAME, phoneticFamilyName);
builder.withValue (ContactsContract.CommonDataKinds.StructuredName.PHONETIC_MIDDLE_NAME, phoneticMiddleName);
builder.withValue (ContactsContract.CommonDataKinds.StructuredName.PHONETIC_GIVEN_NAME, phoneticGivenName);
ops.add (builder.build());
}
而且,这是获取聚合联系人显示名称的代码:
ContentResolver resolver = context.getContentResolver();
ContentProviderResult[] results = resolver.applyBatch(ContactsContract.AUTHORITY, ops);
如果Android忽略了用户提供的显示名称,该列的重点是什么?
答案 0 :(得分:0)
如果您查看DISPLAY_NAME的文档,则会说:
应该用于显示联系人的名称。非结构化 名称的组件应与其结构化一致 表示强>
这意味着每当您更新DISPLAY_NAME
时,它都会更新名称部分(GIVEN_NAME
等),每当您更新其中一个部分时,它都会更新DISPLAY_NAME
,所以在任何时候,名称部分和DISPLAY_NAME
都是一致的。
我猜他们是这样做的,以避免用户修复设置为“John Doe
”到“Bob Dylan
”的电话号码的错误名称等问题,但名称部分不是已更新为“John
”和“Doe
”,这显然是一种不受欢迎的情况。