Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get contacts' phone number in Android

My code is as below:

String[] columns = {ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER};
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, columns, null, null, null);

int ColumeIndex_ID = cursor.getColumnIndex(ContactsContract.Contacts._ID);
int ColumeIndex_DISPLAY_NAME = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
int ColumeIndex_HAS_PHONE_NUMBER = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);

while(cursor.moveToNext()) 
{   
    String id = cursor.getString(ColumeIndex_ID);
    String name = cursor.getString(ColumeIndex_DISPLAY_NAME);
    String has_phone = cursor.getString(ColumeIndex_HAS_PHONE_NUMBER);

    if(!has_phone.endsWith("0")) 
    {
        System.out.println(name);
        GetPhoneNumber(id);
    }           
}

cursor.close();


public String GetPhoneNumber(String id) 
{
    String number = "";
    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone._ID + " = " + id, null, null);

    if(phones.getCount() > 0) 
    {
        while(phones.moveToNext()) 
        {
            number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        }
        System.out.println(number);
    }

    phones.close();

    return number;
}

I get contacts' name success, but get phone number fail in GetPhoneNumber().
The phones.getCount() always equal 0.
How can I modify?

like image 620
brian Avatar asked Jun 27 '12 03:06

brian


People also ask

Why number is not showing in contact list?

It is also possible that 'Hide Contacts Without Numbers' functions have been enabled after the Android update. It happens sometimes, and due to the activation of this option, Android not showing contact names. So, you have to just disable this option from the settings. On the Phone app, tap on 'Settings'.

Where are contact numbers saved?

Android Internal Storage If contacts are saved in the internal storage of your Android phone, they will be stored specifically in the directory of /data/data/com. Android. providers. contacts/databases/contacts.


6 Answers

Android Contact API For 2.0

// //  Find contact based on name. // ContentResolver cr = getContentResolver(); Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null,     "DISPLAY_NAME = '" + NAME + "'", null, null); if (cursor.moveToFirst()) {     String contactId =         cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));     //     //  Get all phone numbers.     //     Cursor phones = cr.query(Phone.CONTENT_URI, null,         Phone.CONTACT_ID + " = " + contactId, null, null);     while (phones.moveToNext()) {         String number = phones.getString(phones.getColumnIndex(Phone.NUMBER));         int type = phones.getInt(phones.getColumnIndex(Phone.TYPE));         switch (type) {             case Phone.TYPE_HOME:                 // do something with the Home number here...                 break;             case Phone.TYPE_MOBILE:                 // do something with the Mobile number here...                 break;             case Phone.TYPE_WORK:                 // do something with the Work number here...                 break;         }     }     phones.close(); } cursor.close(); 

For more information see this link

like image 151
K_Anas Avatar answered Sep 29 '22 16:09

K_Anas


try this.

    ContentResolver cr = getContentResolver();     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,             null, null, null);     if (cur.getCount() > 0) {         while (cur.moveToNext()) {             String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));             String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));             Log.i("Names", name);             if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)              {                 // Query phone here. Covered next                 Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id,null, null);                  while (phones.moveToNext()) {                           String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));                          Log.i("Number", phoneNumber);                         }                  phones.close();              }          }     } 
like image 22
kalandar Avatar answered Sep 29 '22 18:09

kalandar


You need permission like -

 android:name="android.permission.READ_CONTACTS"/>

Then, Calling the Contact Picker

 Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);

Then,

@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);

switch (reqCode) {
case (PICK_CONTACT) :
   if (resultCode == Activity.RESULT_OK) {
   Uri contactData = data.getData();
   Cursor c =  managedQuery(contactData, null, null, null, null);
    if (c.moveToFirst()) {
     String name = c.getString(c.getColumnIndexOrThrow(People.NAME));
     // TODO Whatever you want to do with the selected contact name.
   }
 }
 break;
 }
}
like image 41
Rakesh Avatar answered Sep 29 '22 18:09

Rakesh


Old question but I don't see the following answer here.

private static final String[] PROJECTION ={
        ContactsContract.Contacts._ID,
        ContactsContract.CommonDataKinds.Phone.NUMBER,
        ContactsContract.Contacts.DISPLAY_NAME_PRIMARY,
        ContactsContract.Contacts.PHOTO_THUMBNAIL_URI,
        ContactsContract.Contacts.LOOKUP_KEY,
};

new CursorLoader(
        this,
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
        PROJECTION,
        null,
        null,//mSelectionArgs,
        ContactsContract.Contacts.DISPLAY_NAME_PRIMARY
);

Use column index ContactsContract.CommonDataKinds.Phone.NUMBER to retreive the phone number from the cursor.

like image 22
Djangow Avatar answered Sep 29 '22 17:09

Djangow


U can use contact picker.

Call contact picker on any button and use the below code :

|*| Add in : AndroidManifest.xml

<uses-permission android:name="android.permission.READ_CONTACTS"/>

|*| Add in : activity_name.java

void calContctPickerFnc()
{
    Intent calContctPickerIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
    calContctPickerIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
    startActivityForResult(calContctPickerIntent, 1);
}

@Override
public void onActivityResult(int reqCode, int resultCode, Intent data)
{
    super.onActivityResult(reqCode, resultCode, data);

    switch (reqCode)
    {
        case (1) :
            if (resultCode == Activity.RESULT_OK)
            {
                Uri contctDataVar = data.getData();

                Cursor contctCursorVar = getContentResolver().query(contctDataVar, null,
                        null, null, null);
                if (contctCursorVar.getCount() > 0)
                {
                    while (contctCursorVar.moveToNext())
                    {
                        String ContctUidVar = contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.Contacts._ID));

                        String ContctNamVar = contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

                        Log.i("Names", ContctNamVar);

                        if (Integer.parseInt(contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
                        {
                            // Query phone here. Covered next
                            String ContctMobVar = contctCursorVar.getString(contctCursorVar.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            Log.i("Number", ContctMobVar);
                        }

                    }
                }
            }
            break;
    }
}
like image 33
Sujay U N Avatar answered Sep 29 '22 17:09

Sujay U N


Your can add this code on your Activity class:

    private final int PICK_CONTACT = 5;

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);

    Intent intent = new Intent(Intent.ACTION_PICK,
                    ContactsContract.Contacts.CONTENT_URI);
            intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
            startActivityForResult(intent, PICK_CONTACT);

    //Your code
   }

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == PICK_CONTACT && resultCode == RESULT_OK) {
        Uri contactData = data.getData();

        Cursor phones = getContentResolver()
                .query(contactData,
                        null,
                        null,
                        null,
                        null);

        String name = "", phoneNumber = "";

        while (phones.moveToNext()) {
            name = phones.getString(phones.getColumnIndex(
                    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            phoneNumber = phones.getString(phones.getColumnIndex(
                    ContactsContract.CommonDataKinds.Phone.NUMBER));

        }
        phones.close();
    }
  }
like image 37
Faxriddin Abdullayev Avatar answered Sep 29 '22 16:09

Faxriddin Abdullayev