Use ContentProviderOperation for this.
ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();
If a group exists with groupId ,
operationList.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE, ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, groupId).build());
If the group does not exist:
// create group and insert ContentValues groupValues; ContentResolver cr = context.getContentResolver(); groupValues = new ContentValues(); groupValues.put(ContactsContract.Groups.TITLE, newGroupId); try { cr.insert(ContactsContract.Groups.CONTENT_URI, groupValues); } catch (Exception e) { // handle } operationList.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE, ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, newGroupId).build());
And, apply the changes:
ContentProviderResult[] cpr = context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, operationList);
La machine
source share