【发布时间】:2017-03-19 14:44:52
【问题描述】:
当为RawContact 更新ContactsContract.Data StructuredName 行时,我的代码将DISPLAY_NAME 列设置为用户提供的值。它还使用用户提供的值更新第一个、中间、最后一个。
当从ContactsContract.Contacts 取回联系人DISPLAY_NAME 时,提供给RawContact 的显示名称将被忽略,相反,Android 根据StructuredName 名称部分制作了一个。
有没有办法告诉ContactsContract 使用提供的显示名称?
例如,考虑将以下内容写入StructuredName 行:
DISPLAY_NAME: F L
GIVEN_NAME: F
MIDDLE_NAME: X
LAST_NAME: L
在这种情况下,我希望聚合联系人显示名称为“F L”。但是,它将是“F X L”。
下面是编写 StructureName 行的代码,其中为每一列设置的值是成员变量:
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);
下面是获取聚合联系人显示名称的代码:
public static ContactData fetchContact (Cursor cursor)
{
String name = cursor.getString (cursor.getColumnIndex (ContactsContract.Contacts.DISPLAY_NAME_PRIMARY));
... do something with the feteched data ...
}
如果 Android 忽略用户提供的显示名称,那么该列的意义何在?
【问题讨论】: