Question

I am working on an android application. In my app I have to add details and image to Android contact. So I used the following code

private void addcontact() {
            // TODO Auto-generated method stub

            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());

            Bitmap bm = getBitmapFromURL(imageurl);

            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bm.compress(Bitmap.CompressFormat.PNG , 75, stream);

            ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                       .withValue(ContactsContract.Data.RAW_CONTACT_ID, 9) // here 9 is _ID where I'm inserting image
                       .withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1)
                       .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
                       .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO,stream.toByteArray())
                       .build());



            ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
               .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
               .withValue(Data.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE)
               .withValue(StructuredName.DISPLAY_NAME, "sarath")
               .build());



            try {
                ContentProviderResult[] res = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
            } catch (RemoteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (OperationApplicationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }



        }
    });

The code is working without exception. The contact is added to the contact successfully but contact image is not loading. My second doubt is I have 3 type phoen numbers (home, work, mobile) .I could add one phone number but How can I add all three . How to add address and Email Id.. Please help me friends

Was it helpful?

Solution

At last I got answer for my issue So I am posting here. May be helpful for somebody.

private void addcontact(String name, String phone, String profilepic) {
    // TODO Auto-generated method stub



    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, phone).build());

    Drawable dr = getResources().getDrawable(R.drawable.ic_launcher);

    Bitmap bm = getBitmapFromURL(profilepic);

    // bm = BitmapFactory.decodeResource(getResources(),
    // R.drawable.ic_launcher);
    //

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bm.compress(Bitmap.CompressFormat.JPEG, 80, baos);
    byte[] b = baos.toByteArray();

    ops.add(ContentProviderOperation
            .newInsert(ContactsContract.Data.CONTENT_URI)
            .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
            .withValue(
                    ContactsContract.Data.MIMETYPE,
                    ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
            .withValue(ContactsContract.CommonDataKinds.Photo.DATA15, b)
            .build());

    // ByteArrayOutputStream stream = new ByteArrayOutputStream();
    // bm.compress(Bitmap.CompressFormat.PNG , 75, stream);
    //
    // ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
    // .withValue(ContactsContract.Data.RAW_CONTACT_ID, 9) // here 9 is _ID
    // where I'm inserting image
    // .withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1)
    // .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
    // .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO,stream.toByteArray())
    // .build());

    ops.add(ContentProviderOperation
            .newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
            .withValueBackReference(Data.RAW_CONTACT_ID,
                    rawContactInsertIndex)
            .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
            .withValue(StructuredName.DISPLAY_NAME, name).build());

    try {
        ContentProviderResult[] res = getContentResolver().applyBatch(
                ContactsContract.AUTHORITY, ops);

        Toast.makeText(getApplicationContext(),
                "contact added to the phone", Toast.LENGTH_LONG).show();
    } catch (RemoteException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OperationApplicationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top