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)