61548

Inserting a new contact programmatically through my app without using Intent

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:

void addContact(Context ctx, PreviewContactModel model) { ArrayList<Contact_Model> contact_models = handler.getAllContacts(); Contact_Model contact_model = new Contact_Model(); ArrayList<ContentProviderOperation> contentProviderOperation = new ArrayList<>(); 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() > 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() > 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() > 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() > 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("") && !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(); } }

Please correct me if I am doing something wrong. Thanks in advance.

Answer1:

Try this code

String displayName = "ABC"; String emailID = "abc@mail.com"; String mobileNumber = "88888888"; String homeNumber = "1111"; String workNumber = "2222"; String company = "xyz"; String jobTitle = "boss"; ArrayList<ContentProviderOperation> contentProviderOperationArrayList = new ArrayList <ContentProviderOperation> (); contentProviderOperationArrayList.add(ContentProviderOperation.newInsert( ContactsContract.RawContacts.CONTENT_URI) .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) .build()); //Name if (displayName != null) { contentProviderOperationArrayList.add(ContentProviderOperation.newInsert( ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) .withValue( ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, displayName).build()); } //Mobile Number if (mobileNumber != null) { contentProviderOperationArrayList.add(ContentProviderOperation. newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, mobileNumber) .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) .build()); } //Home if (homeNumber != null) { contentProviderOperationArrayList.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, homeNumber) .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_HOME) .build()); } //Work if (workNumber != null) { contentProviderOperationArrayList.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, workNumber) .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK) .build()); } //Email if (emailID != null) { contentProviderOperationArrayList.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.Email.DATA, emailID) .withValue(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK) .build()); } //Organization if (!company.equals("") && !jobTitle.equals("")) { contentProviderOperationArrayList.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, company) .withValue(ContactsContract.CommonDataKinds.Organization.TYPE, ContactsContract.CommonDataKinds.Organization.TYPE_WORK) .withValue(ContactsContract.CommonDataKinds.Organization.TITLE, jobTitle) .withValue(ContactsContract.CommonDataKinds.Organization.TYPE, ContactsContract.CommonDataKinds.Organization.TYPE_WORK) .build()); } // Creating new contact try { getContentResolver().applyBatch(ContactsContract.AUTHORITY, contentProviderOperationArrayList); } catch (Exception e) { e.printStackTrace(); Toast.makeText(yourContext, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show(); }

Recommend

  • Whats the fastest way to create large numbers of contacts?
  • How to get contact id after add a new contact in android?
  • How do I create a group with a source_id reference?
  • Syntax error when querying contacts database for an email
  • DOM IDBDatabase Exception 5 when adding data in indexedDB
  • Write 100 million files to s3
  • Android:ActivityNotFoundException
  • Gnuplot from data file for assignment in do for loop for an animation
  • ggvis multiple lines with tooltips
  • WPF DataGrid - Can I decorate my POCOs with attributes to have custom column names?
  • Using standard evaluation with a udf in dplyr
  • rcharts nvd3 linechart with categorical x axis
  • R plotting, date on x axis
  • Distance matrix in R
  • Define the file path from the file name in R
  • Samsung Nexus S vs HTC - NFC Intent Filter + AAR
  • Scatter plot with factor on horizontal axis
  • Android NFC: can we use intent filter with mime type? (android 2.3.3)
  • Can't upload base64 image using cordova-plugin-file-transfer
  • Plot ROC curve and calculate AUC in R at specific cutoff info
  • Visual Studio: Garbled debug watch of std::string's?
  • What is the difference between running in VS 2010 and running a builded EXE?
  • Problem serializing DecimalFormatSymbols in 2.3.4
  • Issue with static code in Android
  • SonataMediaBundle: The file “” does not exist 500 Internal Server Error - FileNotFoundException
  • Converting a data frame into named object in R
  • Referring to individual variables in … with dplyr quos
  • Convert data type in R or Python
  • Problem with rejecting incoming call
  • How do I remove all but some records based on a threshold?
  • Installed module is empty
  • VSO Build — Response status code does not indicate success: 404 (Not Found)
  • Exception “firebase.functions() takes … no argument …” when specifying a region for a Cloud Function
  • Installing Hadoop, Java Exception about illegal characters at index 7?
  • Convert array of 8 bytes to signed long in C++
  • VB.net deserialize, JSON Conversion from type 'Dictionary(Of String,Object)' to type '
  • Why can't I rebase on to an ancestor of source changesets if on a different branch?
  • -fvisibility=hidden not passed by compiler for Debug builds
  • Unable to use reactive element in my shiny app
  • Net Present Value in Excel for Grouped Recurring CF