Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Inserting contacts in Android 2.2

I am trying to insert new RawContact contacts, but the RawContact added doesn't get displayed when I view the contacts through Contacts or phonebook. As I understand if we create a RawContact and there is no contact associated with it then the contact will be automatically inserted. I get a valid value of rawContactId and no exceptions are thrown, so I assume the insertion is successful. Am I doing anything wrong or am I missing something? I am using the code example from developer site, just pasting it here:

 ContentValues values = new ContentValues();  values.put(RawContacts.ACCOUNT_TYPE, accountType);   values.put(RawContacts.ACCOUNT_NAME, accountName);  Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);   long rawContactId = ContentUris.parseId(rawContactUri);    values.clear();   values.put(Data.RAW_CONTACT_ID, rawContactId);   values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);   values.put(StructuredName.DISPLAY_NAME, "Mike Sullivan");   getContentResolver().insert(Data.CONTENT_URI, values);  
like image 638
Alok Save Avatar asked Nov 02 '10 07:11

Alok Save


1 Answers

I thought this Q was long forgotten but Since someone upvoted it, I am assuming someone else also faces the same problem as me. After a little struggle I was able to figure out the problem and insert contacts, Hope this helps, here is the sample code:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); int rawContactInsertIndex = ops.size();  ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)    .withValue(RawContacts.ACCOUNT_TYPE, null)    .withValue(RawContacts.ACCOUNT_NAME,null )    .build()); ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex)    .withValue(Data.MIMETYPE,Phone.CONTENT_ITEM_TYPE)    .withValue(Phone.NUMBER, "9X-XXXXXXXXX")    .build()); ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)    .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)    .withValue(Data.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE)    .withValue(StructuredName.DISPLAY_NAME, "Mike Sullivan")    .build());   ContentProviderResult[] res = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
like image 131
Alok Save Avatar answered Oct 05 '22 19:10

Alok Save