public static void insertPhoneContact(String displayName, String number, Context context) {
/*context is App or Activity*/
ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
int contactIndex = operations.size();
//Newly Inserted contact
// A raw contact will be inserted ContactsContract.RawContacts table in contacts database.
operations.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)//Step1
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build());
//Display name will be inserted in ContactsContract.Data table
operations.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)//Step2
.withValueBackReference(ContactsContract.RawContacts.Data.RAW_CONTACT_ID, contactIndex)
.withValue(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, displayName)
.build());
//Mobile number will be inserted in ContactsContract.Data table
operations.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)//Step 3
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, contactIndex)
.withValue(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, number)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
.build());
boolean isSuccess = false;
try {
// We will do batch operation to insert all above data
//Contains the output of the app of a ContentProviderOperation.
//It is sure to have exactly one of uri or count set
ContentProviderResult[] contentProvider = context.getContentResolver()
.applyBatch(ContactsContract.AUTHORITY, operations); //apply above data insertion into contacts list
Log.e("insertPhoneContact", "result: " + contentProvider);
isSuccess = contentProvider != null && contentProvider.length > 0;
} catch (RemoteException e) {
e.printStackTrace();
} catch (OperationApplicationException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("insertPhoneContact displayName: " + displayName + ", number: " + number + ", isSuccess: " + isSuccess);
}