Android code for reading phone contacts detail

Here is code for reading all phone contacts(phone number,  email etc with their type) stored in android phone programmatically.

public static void getContacts(ContentResolver cr) {
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (cur.getCount() > 0) {
    while (cur.moveToNext()) {
    // read id
        String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
        /** read names **/
        String displayName = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        /** Phone Numbers **/
            Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null);
            while (pCur.moveToNext()) {
                String number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                String typeStr = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
  /** EMAIL **/
  Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
    ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[] { id }, null);
  while (emailCur.moveToNext()) {
   String email = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
   String emailType = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));


Permission in AndroidManifest.xml: 
Add the READ_CONTACTS permission to your AndroidManifest.xml:
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>


  1. What is the variable that calls the search? What would I change in the code if I want to use a variable from a text box or recognizer?

  2. @Ian, I think your question is not clear... What you are trying to refer by "the variable that calls the search"???

    If you are confused about how to call this function :
    the code presented above is static function which takes instance of ContentResolver as parameter.

    You can call it as :
    YourClassName.getContacts(instace_of_ContentResolver ).

    If you want to read the contact details of a particular person You can add parameter to this function and compare with the results to get more information.


  3. I understand but need example to test, can u provide please?

  4. you can paste this code on any basic 'HelloWorld' type project class and call it from there.

  5. Till now i understand completely but coming to calling getContacts i need to pass content resolver instance there i am facing problem . Can you provide the solution or syntax for instance for content resolver . Thanks in advance

  6. Till now i understand all the procedure but coming to getContacts method calling i am facing problems. Can you provide that syntax. Thanks in advance


Your Comment and Question will help to make this blog better...