Android How to - Query, delete, update, add Contacts








The following code shows how to Query, delete, update, add Contacts.

Example

Manifest xml file

<?xml version="1.0" encoding="utf-8"?>
<manifest ...
        <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
        <uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>
</manifest> 

Main layout xml file

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="50dip"
        android:paddingTop="25dip"
        android:text="Click Buttons Below to Query, Add, Modify, Delete" />

    <Button
        android:id="@+id/queryButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Click to Query Contacts" />

    <Button
        android:id="@+id/addContactButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Click to Add A Contact" />

    <Button
        android:id="@+id/modifyPhoneButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Click to Modify the Contact" />

    <Button
        android:id="@+id/deleteContactButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Click to Delete the Contact" />
</LinearLayout>

Main Activity Java code

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.net.Uri;
import android.widget.Toast;
import android.database.Cursor;
import android.provider.Contacts.People;
import android.content.ContentValues;
//w  w  w . j  av a2  s.c om
public class MainActivity extends Activity {
  public Uri addUri = null;
  public Uri changeUri = null;   
    @Override  /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button queryButton = (Button)findViewById(R.id.queryButton);
        queryButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v){
               queryContactPhoneNumber();
            }
        });        
        Button addButton = (Button)findViewById(R.id.addContactButton);
        addButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v){
               addContactPhoneNumber("Steve Wozniak", "415-555-7654");
            }
        });        
        Button modButton = (Button)findViewById(R.id.modifyPhoneButton);
        modButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v){
               modifyPhoneNumber("916-555-1234");
            }
        });        
        Button delButton = (Button)findViewById(R.id.deleteContactButton);
        delButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v){
               deleteContactPhoneNumber();
            }
        });        
    }    
  private void queryContactPhoneNumber() {
          String[] cols = new String[] {People.NAME, People.NUMBER};
          Uri myContacts = People.CONTENT_URI;
          Cursor mqCur = managedQuery(myContacts,cols,null,null,null);
          if (mqCur.moveToFirst()) {
                String myname = null;
                String mynumber = null;
                do {
                  myname = mqCur.getString(mqCur.getColumnIndex(People.NAME));
                  mynumber = mqCur.getString(mqCur.getColumnIndex(People.NUMBER));
                  Toast.makeText(this, myname + " " + mynumber, Toast.LENGTH_SHORT).show();
                } while (mqCur.moveToNext());
          }
  }
  private void addContactPhoneNumber(String newName, String newPhone) {
      ContentValues myContact = new ContentValues();
      myContact.put(People.NAME, newName);
      addUri = getContentResolver().insert(People.CONTENT_URI, myContact);
      Uri contentUri = Uri.withAppendedPath(addUri, People.Phones.CONTENT_DIRECTORY);
      myContact.clear();
      myContact.put(People.Phones.TYPE, People.TYPE_MOBILE);
      myContact.put(People.NUMBER, newPhone);
      changeUri = getContentResolver().insert(contentUri, myContact);
      Toast.makeText(this, "New Contact: " + newName + " " + newPhone, Toast.LENGTH_SHORT).show();
  }
  private void modifyPhoneNumber(String replacePhone) {
        if (changeUri == null) {
              Toast.makeText(this, "You need to create a new contact to update!", Toast.LENGTH_LONG).show();
        } else {
              ContentValues newPhoneNumber = new ContentValues();
              newPhoneNumber.put(People.Phones.TYPE, People.TYPE_MOBILE);
              newPhoneNumber.put(People.NUMBER, replacePhone);
              getContentResolver().update(changeUri, newPhoneNumber, null,null);
              Toast.makeText(this, "Updated phone number to: " + replacePhone, Toast.LENGTH_SHORT).show();
        }
      }
    private void deleteContactPhoneNumber() {
      if (changeUri == null) {
        Toast.makeText(this, "You need to create a new contact to delete!", Toast.LENGTH_LONG).show();
        
      } else {
        getContentResolver().delete(addUri, null, null);
        Toast.makeText(this, "Deleted contact at: " + addUri.toString(), Toast.LENGTH_SHORT).show();
        addUri = null;
        changeUri = null;
      }
    }  
}  
null