1

I am able to update number in contacts using this.

String where = ContactsContract.Data.CONTACT_ID + " = ? AND " +
            ContactsContract.Data.MIMETYPE + " = ? ";
String[] params = new String[] {contacts.getContactId(),
            ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE};
ops.add(ContentProviderOperation
                    .newUpdate(ContactsContract.Data.CONTENT_URI)
                    .withSelection(where, params)
                    .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,"111111")
                    .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,type_home))
                    .build());

But I also want to insert a new number in existing contacts. I have tried this

ops.add(ContentProviderOperation.
             newInsert(ContactsContract.Data.CONTENT_URI)
            .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,id)
            .withValue(ContactsContract.Data.MIMETYPE,
                    ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
            .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "111111666")
            .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,ContactsContract.CommonDataKinds.Phone.TYPE_WORK)
            .build());

but I am not able to add number in existing contacts.

Dheeraj
  • 11
  • 3

1 Answers1

0

Try Below Function for add contact and call function like

addContact(getApplicationContext(),"Abhi","+910123456789","+919876543210","1122334455","ImDroid","Developer");

AddContact Method

public void addContact(Context ctx, String displayname, String homenumber,
                String mobilenumber, String worknumber,String companyname, String jobtitle) {

    ArrayList<ContentProviderOperation> contentProviderOperation = new
            ArrayList<ContentProviderOperation>();

    contentProviderOperation.add(ContentProviderOperation
            .newInsert(ContactsContract.RawContacts.CONTENT_URI)
            .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
            .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
            .build());

    //------------------------------ Names ---------------------------------
    if (displayname!= null) {
        contentProviderOperation.add(ContentProviderOperation
                .newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(
                        ContactsContract.Data.RAW_CONTACT_ID, 0)
                .withValue(
                        ContactsContract.Data.MIMETYPE,
                        ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                .withValue(
                        ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
                        displayname).build());
    }

    // -------------------- Mobile Number----------------------------------
    if (mobilenumber!= null) {
        contentProviderOperation.add(ContentProviderOperation
                .newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(
                        ContactsContract.Data.RAW_CONTACT_ID, 0)
                .withValue(
                        ContactsContract.Data.MIMETYPE,
                        ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,
                        mobilenumber)
                .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
                        ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
                .build());
    }

    //---------------------- Home Numbers --------------------------------
    if (homenumber!= null) {
        contentProviderOperation.add(ContentProviderOperation
                .newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(
                        ContactsContract.Data.RAW_CONTACT_ID, 0)
                .withValue(
                        ContactsContract.Data.MIMETYPE,
                        ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,
                        homenumber)
                .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
                        ContactsContract.CommonDataKinds.Phone.TYPE_HOME)
                .build());
    }

    //----------------------------- Work Numbers -------------------------
    if (worknumber!= null) {
        contentProviderOperation.add(ContentProviderOperation
                .newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(
                        ContactsContract.Data.RAW_CONTACT_ID, 0)
                .withValue(
                        ContactsContract.Data.MIMETYPE,
                        ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,
                        worknumber)
                .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
                        ContactsContract.CommonDataKinds.Phone.TYPE_WORK)
                .build());
    }

    // ---------------------------- Organization--------------------------
    if (!companyname.equals("") && !jobtitle.equals("")) {
        contentProviderOperation.add(ContentProviderOperation
                .newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(
                        ContactsContract.Data.RAW_CONTACT_ID, 0)
                .withValue(
                        ContactsContract.Data.MIMETYPE,
                        ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
                .withValue(
                        ContactsContract.CommonDataKinds.Organization.COMPANY,
                        companyname)
                .withValue(
                        ContactsContract.CommonDataKinds.Organization.TYPE,
                        ContactsContract.CommonDataKinds.Organization.TYPE_WORK)
                .withValue(
                        ContactsContract.CommonDataKinds.Organization.TITLE,
                        jobtitle)
                .withValue(
                        ContactsContract.CommonDataKinds.Organization.TYPE,
                        ContactsContract.CommonDataKinds.Organization.TYPE_WORK)
                .build());
    }
    // Asking the Contact provider to create a new contact
    try {
        ctx.getContentResolver()
                .applyBatch(ContactsContract.AUTHORITY, contentProviderOperation);
    } catch (Exception e) {
        e.printStackTrace();
        //show exception in toast
        Toast.makeText(ctx, "Exception: " + e.getMessage(),
                Toast.LENGTH_SHORT).show();
    }
}
Abhishek Patel
  • 4,280
  • 1
  • 24
  • 38
  • I don't want to add new contact, I want to add number in existing contact, please read question properly. – Dheeraj Jun 29 '17 at 06:42
  • @Dheeraj You just use `where clause` in `contentProviderOperation` for fetching particular contacts and according to that contact's `ContactId` you can update contact like above function. – Abhishek Patel Jun 29 '17 at 06:47
  • @Dheeraj also pass specific `rawcontactId` instead of `0` and also used `newUpdate,withSelection` parameter instead of `newInsert,withValueBackReference` – Abhishek Patel Jun 29 '17 at 06:48
  • make sure this `ctx.getContentResolver() .applyBatch(ContactsContract.AUTHORITY, contentProviderOperation);` you already added? – Abhishek Patel Jun 29 '17 at 07:00
  • What are you talking? Without .applyBatch is it possible to add. – Dheeraj Jun 29 '17 at 10:49