Juliet
Juliet

Reputation: 1050

Insert contact in Android with ContactsContract

I am trying to add a new contact to the Android 2.2 contacts directly.

//this code doesn't work    
ContentValues cv=new ContentValues();
cv.put(ContactsContract.Contacts.DISPLAY_NAME, "TESTEST");
Uri u= getContentResolver().insert(ContactsContract.Contacts.CONTENT_URI, cv);

gives me the error "Aggregate contacts are created automatically." What am I doing wrong?

This calls the Android's add contact form:

//this code works but it's not ideal
Intent i = new Intent(Intent.ACTION_INSERT_OR_EDIT);
i.setType(Contacts.CONTENT_ITEM_TYPE);
i.putExtra(Insert.NAME, "TESTTEST");
i.putExtra(Insert.PHONE, "209384");
startActivity(i);

I can't figure out how to send it a first name and a last name - only a 'name' which it puts in the first name box. Also I'd like to separate the postal code into street, city, state, and zip which right now is all being put into the street box.

Upvotes: 16

Views: 31542

Answers (4)

Rajesh Satvara
Rajesh Satvara

Reputation: 3964

ContentValues cv = new ContentValues();
cv.put(People.NAME, e1.getText().toString());

// e1.getText().tostring() is Contact name 

Uri u =    getContentResolver().insert(People.CONTENT_URI, cv);

Uri pathu = Uri.withAppendedPath(u, People.Phones.CONTENT_DIRECTORY);    

cv.clear();

cv.put(People.NUMBER, e2.getText().toString());

// e2.getText().tostring() is Contact number

getContentResolver().insert(pathu, cv);

Toast.makeText(getApplicationContext(), "Contact Added",Toast.LENGTH_LONG).show();

Upvotes: 1

Rupesh Kumar
Rupesh Kumar

Reputation: 269

Add Contact Details in android

import java.util.ArrayList;

import android.app.Activity;
import android.content.ContentProviderOperation;
import android.content.ContentProviderResult;
import android.content.OperationApplicationException;
import android.net.Uri;
import android.os.Bundle;
import android.os.RemoteException;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Contacts.Data;
import android.provider.ContactsContract.RawContacts;

public class DemoAddAddressBook extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  /*
   * Uri newPerson = addContactName();
   *
   * addMobilePhoneNo(newPerson); addEmail(newPerson);
   * addPostalAddress(newPerson); addOrganization(newPerson);
   */

  ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
  int rawContactInsertIndex = ops.size();

  ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
    .withValue(RawContacts.ACCOUNT_TYPE, null)
    .withValue(RawContacts.ACCOUNT_NAME, null).build());

  //Phone Number
  ops.add(ContentProviderOperation
    .newInsert(ContactsContract.Data.CONTENT_URI)
    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,
      rawContactInsertIndex)
    .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
    .withValue(Phone.NUMBER, "9X-XXXXXXXXX")
    .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
    .withValue(Phone.TYPE, "1").build());

  //Display name/Contact name
  ops.add(ContentProviderOperation
    .newInsert(ContactsContract.Data.CONTENT_URI)
    .withValueBackReference(Data.RAW_CONTACT_ID,
      rawContactInsertIndex)
    .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
    .withValue(StructuredName.DISPLAY_NAME, "Mike Sullivan")
    .build());
  //Email details
  ops.add(ContentProviderOperation
    .newInsert(ContactsContract.Data.CONTENT_URI)
    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,
      rawContactInsertIndex)
    .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
    .withValue(ContactsContract.CommonDataKinds.Email.DATA, "[email protected]")
    .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
    .withValue(ContactsContract.CommonDataKinds.Email.TYPE, "2").build());


  //Postal Address

    ops.add(ContentProviderOperation
      .newInsert(ContactsContract.Data.CONTENT_URI)
      .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,
        rawContactInsertIndex)
      .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE )
      .withValue(ContactsContract.CommonDataKinds.StructuredPostal.POBOX, "Postbox")

      .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE )
      .withValue(ContactsContract.CommonDataKinds.StructuredPostal.STREET, "street")

      .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE )
      .withValue(ContactsContract.CommonDataKinds.StructuredPostal.CITY, "city")

      .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE )
      .withValue(ContactsContract.CommonDataKinds.StructuredPostal.REGION, "region")

      .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE )
      .withValue(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, "postcode")

      .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE )
      .withValue(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, "country")

      .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE )
      .withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, "3")


      .build());


  //Organization details
  ops.add(ContentProviderOperation
    .newInsert(ContactsContract.Data.CONTENT_URI)
    .withValueBackReference(Data.RAW_CONTACT_ID,
      rawContactInsertIndex)
    .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE )
    .withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, "Devindia")
    .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE )
    .withValue(ContactsContract.CommonDataKinds.Organization.TITLE, "Developer")
    .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE )
    .withValue(ContactsContract.CommonDataKinds.Organization.TYPE, "0")

    .build());
  //IM details
    ops.add(ContentProviderOperation
      .newInsert(ContactsContract.Data.CONTENT_URI)
      .withValueBackReference(Data.RAW_CONTACT_ID,
        rawContactInsertIndex)
      .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE)
      .withValue(ContactsContract.CommonDataKinds.Im.DATA, "ImName")
      .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE )
      .withValue(ContactsContract.CommonDataKinds.Im.DATA5, "2")


      .build());
  try {
   ContentProviderResult[] res = getContentResolver().applyBatch(
     ContactsContract.AUTHORITY, ops);
  } catch (RemoteException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (OperationApplicationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }
}

Upvotes: 27

suresh pareek
suresh pareek

Reputation: 98

    ContentValues p=new ContentValues();
    p.put(RawContacts.ACCOUNT_TYPE, "com.google");
    p.put(RawContacts.ACCOUNT_NAME, "email");
    Uri rowcontect= getContentResolver().insert(RawContacts.CONTENT_URI, p);
    long rawcontectid=ContentUris.parseId(rowcontect);

    ContentValues value = new ContentValues();
    value.put(Data.RAW_CONTACT_ID,rawcontectid);
    value.put(android.provider.ContactsContract.Data.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE);
    value.put(StructuredName.DISPLAY_NAME, "kunja gajjar");
    getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, value);

    //adding the contents to the data
    ContentValues ppv=new ContentValues();
    ppv.put(android.provider.ContactsContract.Data.RAW_CONTACT_ID, rawcontectid);
    ppv.put(android.provider.ContactsContract.Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
    ppv.put(Phone.NUMBER, "975657789");
    ppv.put(Phone.TYPE, Phone.TYPE_MOBILE);
    this.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, ppv);

Upvotes: 2

Andrew
Andrew

Reputation: 19

This answer seems to be helpful: https://stackoverflow.com/a/3279117/1259161

It describes how to invoke the contacts entry form using the ContractsContract APIs. These APIs ought to also let you make use of ContactsContract.CommonDataKinds.StructuredPostal to specify the extra fields you want.

Upvotes: 2

Related Questions