title: Inserting a new contact programmatically through my app without using Intent
body: <p>I am working with an app in with I am interacting with phone contacts.
  I want to add a new Contact to my phones Contacts List. I have tried the following code but it is not work:</p>
  
  <pre><code>void addContact(Context ctx, PreviewContactModel model) {
  
          ArrayList&lt;Contact_Model&gt; contact_models = handler.getAllContacts();
  
          Contact_Model contact_model = new Contact_Model();
  
          ArrayList&lt;ContentProviderOperation&gt; contentProviderOperation = new ArrayList&lt;&gt;();
  
          int rawContactID = Integer.parseInt(contact_models.get(contact_models.size() - 1).getContactId()) + 1;
  
          contact_model.setContactId(String.valueOf(rawContactID));
  
          contentProviderOperation.add(ContentProviderOperation
                  .newInsert(ContactsContract.RawContacts.CONTENT_URI)
                  .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
                  .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
                  .build());
  
          contact_model.setContactAccount(new ContactAccount(ContactsContract.RawContacts.ACCOUNT_NAME, ContactsContract.RawContacts.ACCOUNT_TYPE));
  
          // ------------------------------------------------------ Names
          if (model.getName() != null) {
              contentProviderOperation.add(ContentProviderOperation
                      .newInsert(ContactsContract.Data.CONTENT_URI)
                      .withValueBackReference(
                              ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                      .withValue(
                              ContactsContract.Data.MIMETYPE,
                              ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                      .withValue(
                              ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
                              model.getName()).build());
              contact_model.setContactName(model.getName());
          }
  
          // First Name
  
          if (!model.getFirstName().equals("")) {
              contentProviderOperation.add(ContentProviderOperation
                      .newInsert(ContactsContract.Data.CONTENT_URI)
                      .withValueBackReference(
                              ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                      .withValue(
                              ContactsContract.Data.MIMETYPE,
                              ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                      .withValue(
                              ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME,
                              model.getFirstName()).build());
              contact_model.setFirstName(model.getFirstName());
          }
  
  
          // Last Name
          if (!model.getLastName().equals("")) {
              contentProviderOperation.add(ContentProviderOperation
                      .newInsert(ContactsContract.Data.CONTENT_URI)
                      .withValueBackReference(
                              ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                      .withValue(
                              ContactsContract.Data.MIMETYPE,
                              ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                      .withValue(
                              ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME,
                              model.getLastName()).build());
              contact_model.setLastName(model.getLastName());
          }
  
          //  Contact Photo
  
          if (model.getContactPhoto() != null) {
              contentProviderOperation.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                      .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                      .withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1)
                      .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
                      .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, model.getContactPhoto())
                      .build());
  
              try {
                  contact_model.setContactPhoto(new String(model.getContactPhoto(), "UTF-8"));
              } catch (UnsupportedEncodingException e) {
                  e.printStackTrace();
              }
  
          }
  
          // Contact Note
  
          if (!model.getNote().equals("")){
              contentProviderOperation.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                      .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                      .withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1)
                      .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE)
                      .withValue(ContactsContract.CommonDataKinds.Note.NOTE, model.getNote())
                      .build());
              contact_model.setNote(model.getNote());
          }
  
          // Contact Birthday Date
  
          if (!model.getDob().equals("")){
              contentProviderOperation.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                      .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                      .withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1)
                      .withValue(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY)
                      .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE)
                      .withValue(ContactsContract.CommonDataKinds.Event.DATA, model.getDob())
                      .build());
              contact_model.setDob(model.getDob());
          }
  
  
          // ------------------------------------------------------ Mobile Number
          if (model.getMap().get(0) != null) {
              contentProviderOperation.add(ContentProviderOperation
                      .newInsert(ContactsContract.Data.CONTENT_URI)
                      .withValueBackReference(
                              ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                      .withValue(
                              ContactsContract.Data.MIMETYPE,
                              ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                      .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,
                              model.getMap().get(0))
                      .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
                              ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
                      .build());
              contact_model.setContactNumber(model.getMap().get(0));
          }
  
          // ------------------------------------------------------ Home Numbers
          if (model.getMap().size() &gt; 1) {
              contentProviderOperation.add(ContentProviderOperation
                      .newInsert(ContactsContract.Data.CONTENT_URI)
                      .withValueBackReference(
                              ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                      .withValue(
                              ContactsContract.Data.MIMETYPE,
                              ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                      .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,
                              model.getMap().get(1))
                      .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
                              ContactsContract.CommonDataKinds.Phone.TYPE_HOME)
                      .build());
          }
  
          // ------------------------------------------------------ Work Numbers
          if (model.getMap().size() &gt; 2) {
              contentProviderOperation.add(ContentProviderOperation
                      .newInsert(ContactsContract.Data.CONTENT_URI)
                      .withValueBackReference(
                              ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                      .withValue(
                              ContactsContract.Data.MIMETYPE,
                              ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                      .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,
                              model.getMap().get(2))
                      .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
                              ContactsContract.CommonDataKinds.Phone.TYPE_WORK)
                      .build());
          }
  
          // ------------------------------------------------------ workEmail
          if (model.getEmail().size() &gt; 0) {
              contentProviderOperation.add(ContentProviderOperation
                      .newInsert(ContactsContract.Data.CONTENT_URI)
                      .withValueBackReference(
                              ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                      .withValue(
                              ContactsContract.Data.MIMETYPE,
                              ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
                      .withValue(ContactsContract.CommonDataKinds.Email.DATA,
                              model.getEmail().get(0))
                      .withValue(ContactsContract.CommonDataKinds.Email.TYPE,
                              ContactsContract.CommonDataKinds.Email.TYPE_WORK)
                      .build());
              contact_model.setContactEmail(model.getEmail().get(0));
          }
          // ------------------------------------------------------ homeEmail
          if (model.getEmail().size() &gt; 1) {
              contentProviderOperation.add(ContentProviderOperation
                      .newInsert(ContactsContract.Data.CONTENT_URI)
                      .withValueBackReference(
                              ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                      .withValue(
                              ContactsContract.Data.MIMETYPE,
                              ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
                      .withValue(ContactsContract.CommonDataKinds.Email.DATA,
                              model.getEmail().get(1))
                      .withValue(ContactsContract.CommonDataKinds.Email.TYPE,
                              ContactsContract.CommonDataKinds.Email.TYPE_HOME)
                      .build());
          }
          // ------------------------------------------------------ Organization
          if (!model.getOrganization().equals("") &amp;&amp; !model.getJob().equals("")) {
              contentProviderOperation.add(ContentProviderOperation
                      .newInsert(ContactsContract.Data.CONTENT_URI)
                      .withValueBackReference(
                              ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                      .withValue(
                              ContactsContract.Data.MIMETYPE,
                              ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
                      .withValue(
                              ContactsContract.CommonDataKinds.Organization.COMPANY,
                              model.getOrganization())
                      .withValue(
                              ContactsContract.CommonDataKinds.Organization.TYPE,
                              ContactsContract.CommonDataKinds.Organization.TYPE_WORK)
                      .withValue(
                              ContactsContract.CommonDataKinds.Organization.TITLE,
                              model.getJob())
                      .withValue(
                              ContactsContract.CommonDataKinds.Organization.TYPE,
                              ContactsContract.CommonDataKinds.Organization.TYPE_WORK)
                      .build());
              contact_model.setOrganization(model.getOrganization());
              contact_model.setJob(model.getJob());
          }
          // Asking the Contact provider to create a new contact
          try {
              ctx.getContentResolver()
                      .applyBatch(ContactsContract.AUTHORITY, contentProviderOperation);
              handler.addContact(contact_model);
          } catch (Exception e) {
              e.printStackTrace();
              //show exception in toast
              Toast.makeText(ctx, "Exception: " + e.getMessage(),
                      Toast.LENGTH_SHORT).show();
          }
  
      }
  </code></pre>
  
  <p>Please correct me if I am doing something wrong. Thanks in advance.</p>