Question

I'm trying to retrieve the phone number of a user after selecting him in a picker activity.

This is the code to start the Activity:

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(intent, Constants.COMMUNICATION_CONFIG_RESULT);

This is the code to retrive user name, id and phone number, it's used in a onActivityResult:

 Uri contactData = data.getData();

 ContentResolver cr = getContentResolver();
 Cursor cursor = cr.query(contactData, null, null, null, null);
 if (cursor.moveToFirst()) {
     String contactId =
                    cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));
     String name = cursor.getString(
                    cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

      String hasPhone =
                    cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

      if (hasPhone.equalsIgnoreCase("1")) {

          Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);
          phones.moveToFirst();
          String contactNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
          Log.i("phoneNUmber", "The phone number is "+ contactNumber);

       }
  }

I get always the user name and id, and the user has always the phone number, but the cursor phone is always empty, regardless of the user selected.

Why can't I get the phone numbers?

Was it helpful?

Solution

Found out the problem. It must be:

String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));

if then I query the phone number via

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);

The problem was that I selected different fields for the query.

OTHER TIPS

// try this way,hope this will help you...

Intent i = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
            startActivityForResult(i, 1);
 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        String phoneNumber = getPhoneNumber(data.getData());
        if (phoneNumber.trim().length() > 0) {
            // use this phoneNumber 
        } else {
            ting("Phone Number Not Founded ...");
        }

    }
}


 private String getPhoneNumber(Uri contactInfo) {
    String phoneNumbers = "";
    Cursor cursor = getContentResolver().query(contactInfo, null, null, null, null);
    while (cursor.moveToNext()) {
        String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
        String hashPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
        if ("1".equalsIgnoreCase(hashPhone)) {
            Cursor contactCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
            while (contactCursor.moveToNext()) {
                int type = contactCursor.getInt(contactCursor.getColumnIndex(Phone.TYPE));
                if (type == Phone.TYPE_MOBILE) {
                    int colIdx = contactCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                    phoneNumbers = phoneNumbers.concat(contactCursor.getString(colIdx));
                    break;
                }
            }
            contactCursor.close();
        }
    }
    cursor.close();
    return phoneNumbers;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top