Integrate my app with Contact Integrate my app with Contact android android

Integrate my app with Contact


Hey guy finally I resolved this adding a custom field to ContactProvider and then QuickContactBadge will be link it for you.

My code, for adding, delete a particular entry, delete all entry added by me.

 private static final String IM_LABEL = "Test protocol"; private static final String LOG_TAG = "Log"    /** * This method add my account under IM field at default Contact * application *  * Labeled with my custom protocol. *  * @param contentResolver *            content resolver * @param uid *            User id from android * @param account *            account name */public static void updateIMContactField(ContentResolver contentResolver,        String uid, String account) {    ContentValues contentValues = new ContentValues();    contentValues.put(ContactsContract.Data.RAW_CONTACT_ID,            Integer.parseInt(uid));    contentValues.put(ContactsContract.Data.MIMETYPE,            ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE);    contentValues.put(ContactsContract.CommonDataKinds.Im.TYPE,            ContactsContract.CommonDataKinds.Im.TYPE_CUSTOM);    contentValues.put(ContactsContract.CommonDataKinds.Im.LABEL, IM_LABEL);    contentValues.put(ContactsContract.CommonDataKinds.Im.PROTOCOL,            ContactsContract.CommonDataKinds.Im.PROTOCOL_CUSTOM);    contentValues.put(ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL,            IM_LABEL);    contentValues.put(ContactsContract.CommonDataKinds.Im.DATA, account);    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();    ops.add(ContentProviderOperation            .newInsert(ContactsContract.Data.CONTENT_URI)            .withValues(contentValues).build());    try {        contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);    } catch (Exception e) {        Log.d(LOG_TAG, "Can't update Contact's IM field.");    }}/** * This method remove IM entry at default Contact application. *  * @param contentResolver *            content resolver * @param uid *            User id from android * @param account *            account name */public static void removeIMContactField(ContentResolver contentResolver,        String uid, String account) {    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();    ops.add(ContentProviderOperation            .newDelete(Data.CONTENT_URI)            .withSelection(                    ContactsContract.Data.RAW_CONTACT_ID + "=? and "                            + ContactsContract.Data.MIMETYPE + "=? and "                            + ContactsContract.CommonDataKinds.Im.DATA                            + " = ?",                    new String[] {                            String.valueOf(uid),                            ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE,                            account }).build());    try {        contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);    } catch (Exception e) {        Log.d(LOG_TAG, "Can't delete Contact's IM field.");    }}/** * This method remove IM all entries at default Contact application  *  * @param contentResolver *            content resolver */public static void deleteAllIMContactField(ContentResolver contentResolver) {    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();    ops.add(ContentProviderOperation            .newDelete(Data.CONTENT_URI)            .withSelection(                    ContactsContract.Data.MIMETYPE                            + "= ? and "                            + ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL                            + "= ?",                    new String[] {                            ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE,                            IM_LABEL }).build());    try {        contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);    } catch (Exception e) {        Log.d(LOG_TAG,                "An exception occurred when deleting all IM field of Contact.");    }}

Hope some one found this useful.


Here's how you're able to add Custom Field in the ContactsContract.IM.

val contentProviderOperation = ArrayList<ContentProviderOperation>()val rawContactInsertIndex = contentProviderOperation.sizecontentProviderOperation.add(    ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)        .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)        .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)        .build())val customOperation = ContentProviderOperation    .newInsert(ContactsContract.Data.CONTENT_URI)    .withValueBackReference(        ContactsContract.Data.RAW_CONTACT_ID,        rawContactInsertIndex    ).withValue(        ContactsContract.Contacts.Data.MIMETYPE,        ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE    ).withValue(        ContactsContract.Contacts.Data.MIMETYPE,        ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE    ).withValue(        ContactsContract.CommonDataKinds.Im.TYPE,        ContactsContract.CommonDataKinds.Im.TYPE_CUSTOM    ).withValue(        ContactsContract.CommonDataKinds.Im.PROTOCOL,        ContactsContract.CommonDataKinds.Im.PROTOCOL_CUSTOM    ).withValue(        ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL,        "Custom IM Field"    ).withValue(        ContactsContract.CommonDataKinds.Im.DATA,        "Custom IM Value"    )contentProviderOperation.add(customOperation.build())contentResolver.applyBatch(ContactsContract.AUTHORITY, contentProviderOperation)