我正在尝试为与Android联系人列表中的所有联系人关联的每个电话号码添加原始联系人。当某些联系人有多个与之关联的电话号码时,android联系人列表会多次显示相同的联系人。我想汇总那些新添加的原始联系人(基于电话号码)并在该联系人下显示。
我所做的是,我查询使用以下URI ContactsContract.Contacts.CONTENT_URI
列出设备中的所有联系人
再次使用URI
ContactsContract.CommonDataKinds.Phone.CONTENT_URI
然后为每个联系人创建ClsContactList class objects
,其中包含联系人的显示名称和与该联系人关联的电话号码数组。最后,将这些对象添加到列表和列表中的每个对象,称为附加函数以创建原始联系人。
private static void addContact(Account account, ClsContactList ObjContact) {
ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();
int rawContactInsertIndex = operationList.size();
for (String phoneNumber : ObjContact.PhoneNumbers) {
operationList.clear();
//Creating raw contact
ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
builder.withValue(RawContacts.ACCOUNT_NAME, account.name);
builder.withValue(RawContacts.ACCOUNT_TYPE, account.type);
builder.withValue(ContactsContract.RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT);
//builder.withValue(RawContacts.SYNC1, ObjContact.getDisplay_name());
operationList.add(builder.build());
//INSERT NAME
builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex);
builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, ObjContact.getDisplay_name());
operationList.add(builder.build());
//INSERT MOBILE
builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex);
builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber); // Number of the person
//builder.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
operationList.add(builder.build());
builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex);
builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.org.c99.SyncProviderDemo.profile");
builder.withValue(ContactsContract.Data.DATA1, "VOIP Call ("+phoneNumber+")");
builder.withValue(ContactsContract.Data.DATA2, "Dialer App");
builder.withYieldAllowed(true);
operationList.add(builder.build());
try {
mContentResolver.applyBatch(ContactsContract.AUTHORITY, operationList);
} catch (Exception e) {
e.printStackTrace();
}
}
}
请查看随附的屏幕截图。提前谢谢了。
联系方式活动中的原始联系人
Android联系人列表中重复的联系人
答案 0 :(得分:0)
您需要像这样查询以通过比较mime类型来获取过滤后的数据。
ContactsContract.Data.MIMETYPE
= StructuredPostal.CONTENT_ITEM_TYPE
Cursor cursor = cr.query(ContactsContract.Data.CONTENT_URI,
null, null, ContacsContract.Data.MIMETYPE + "='" +
ContactsContract.StructuredPostal.CONTENT_ITEM_TYPE + "'", null);