0

I need to insert a contact inside a group. I have the id of the group. But I can't. Don't know why.

Can anyone help me?

Here is my code.

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
Account[] accounts = AccountManager.get(getActivity()).getAccounts();
String accountName = null;
String accountType = null;
String account = "mail@gmail.com";
    for(Account account2 : accounts)
        if(account2.name.equals(account)){
            accountName = account2.name;
            accountType = account2.type;
        }
ops.add(ContentProviderOperation
        .newInsert(ContactsContract.RawContacts.CONTENT_URI)
        .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, accountType)
        .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, accountName)
        .build());

ops.add(ContentProviderOperation
        .newAssertQuery(ContactsContract.Groups.CONTENT_URI)
        .withSelection(ContactsContract.Groups._ID + "=?", new String[]{Long.toString(idGroup)})
        .withExpectedCount(1)
        .build());

ops.add(ContentProviderOperation
        .newInsert(ContactsContract.Data.CONTENT_URI)
        .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
        .withValue(ContactsContract.CommonDataKinds.StructuredName.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
        .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "RICARDO")
        .build());

try{
    getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
}catch(Exception e){
    Log.e("ERROR", e.toString());
}
ekad
  • 14,436
  • 26
  • 44
  • 46
Ricardo Filipe
  • 435
  • 4
  • 8
  • 24

1 Answers1

0

This inserts a contact to a group by referring its id:

Builder builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
builder.withValueBackReference(Data.RAW_CONTACT_ID, 0);
builder.withValue(Data.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE);
builder.withValue(GroupMembership.GROUP_ROW_ID, groupId); 

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(builder.build());

try {
  getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
  Log.e("ContactsManager", "Failed to apply batch: "+e);
}
Deqing
  • 14,098
  • 15
  • 84
  • 131