Search code examples
androidcontactscontract

get all mobile number accociated with one contact android


I have contact added to my addressbook which has mutiple number like below.

I want to fetch all 3 number of "User" using ContactsContract content uri. By using below code i got only one contact.

 Cursor cursorAddressBook = mContentResolver.query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);

    if (cursorAddressBook != null) {
        while (cursorAddressBook.moveToNext()) {

            String dataName = cursorAddressBook.getString(cursorAddressBook.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            String dataNumber = cursorAddressBook.getString(cursorAddressBook.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            int dataType = cursorAddressBook.getInt(cursorAddressBook.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA2));
            String contactId = cursorAddressBook.getString(cursorAddressBook.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));

            Log.e("last updat Name last", dataName);
            Log.e("last updated No last", dataNumber);
            Log.e("last updated Type last", dataType);


        }
        cursorAddressBook.close();
    }

Solution

  • From this blogpost If a contact has multiple phone numbers, then You can retrieve all phone numbers and other details using Android’s inbuilt classes (Cursor and ContactsContract ) in Android. And you need to retrieve the contact number based on phone type like (TYPE_MOBILE, TYPE_HOME ect)

    {
        Cursor cursor = cntx.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        Integer contactsCount = cursor.getCount(); // get how many contacts you have in your contacts list 
        if (contactsCount > 0)
        {
            while(cursor.moveToNext())
            {
                String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
                {
                    //the below cursor will give you details for multiple contacts
                    Cursor pCursor = cntx.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
                                                                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                                                                    new String[]{id}, null);
                    // continue till this cursor reaches to all phone numbers which are associated with a contact in the contact list  
                    while (pCursor.moveToNext())
                     {
                          int phoneType         = pCursor.getInt(pCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                          //String isStarred        = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.STARRED));
                          String phoneNo    = pCursor.getString(pCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                          //you will get all phone numbers according to it's type as below switch case.
                          //Logs.e will print the phone number along with the name in DDMS. you can use these details where ever you want.
                          switch (phoneType)
                          {
                                case Phone.TYPE_MOBILE:
                                    Log.e(contactName + ": TYPE_MOBILE", " " + phoneNo);
                                    break;
                                case Phone.TYPE_HOME:
                                    Log.e(contactName + ": TYPE_HOME", " " + phoneNo);
                                    break;
                                case Phone.TYPE_WORK:
                                    Log.e(contactName + ": TYPE_WORK", " " + phoneNo);
                                    break;
                                case Phone.TYPE_WORK_MOBILE:
                                    Log.e(contactName + ": TYPE_WORK_MOBILE", " " + phoneNo);
                                    break;            
                                case Phone.TYPE_OTHER:
                                    Log.e(contactName + ": TYPE_OTHER", " " + phoneNo);
                                    break;
                                default:
                                    break;
                          }
                  }
                  pCursor.close();
                }
            }
            cursor.close();
        }
    }