简体   繁体   中英

Android - cant get phone number of some contacts

I'm having a problem with extracting phone numbers of some people in my contact list.

First I show all the contacts in a listview:

String[] projection = new String[] {
            ContactsContract.Contacts._ID,
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Phone.NUMBER
    };

mCursor = mContext.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            projection, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", new String[] {mContactId}, null);

When clicking on an item, this is how I fetch the contact_id:

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
        Cursor currentCursor = mContactsAdapter.getCursor();

    if (currentCursor != null) {
        notifyOnContactSelectedListeners(String.valueOf(id));
    }
}

Then I create a new fragment, and while loading it I query for the contact's phone & display name:

if (cursor != null && cursor.getCount() > 0) {

        cursor.moveToFirst();

        String firstName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    }

So for some people that has a phone, I get the phone number this way and that's ok. But for some people I can't get the phone number this way - but they do have phone number in the default's phone contacts book.

What went wrong?

I had a similar difficulty. I discovered that the numbers that I was unable to receive had all been imported from my linked Facebook account. You will be able to detect that the contact exists, and indeed that they have a phone number. However, when you try to retrieve said number with a SQL query the result returned will be null .

It transpired that Facebook restrict access to their contacts for security reasons. I am yet to find another provider (eg LinkedIn, Google) which hides phone numbers.

Further reading: Cannot find Facebook contacts in RawContacts

try this may it useful for you

public class Contact extends Activity implements OnItemClickListener{

private static final int PICK_CONTACT = 0;
Cursor c;
Cursor cursor,phones,emails,address;
String id,phoneNo,name;
String[] from;
int[] to;
ListView lv;
Cursor cur,pCur;
List<String> list1 = new ArrayList<String>();

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.contact);
  lv = (ListView)findViewById(R.id.contactlist);
  displayContacts();
  lv.setAdapter(new ArrayAdapter<String>(this,
          android.R.layout.simple_list_item_1, list1)); 
  lv.setOnItemClickListener(this);
}

private void displayContacts() {

    ContentResolver cr = getContentResolver();
   cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
            null, null, null, null);
    if (cur.getCount() > 0) {
        while (cur.moveToNext()) {
            id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
             name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            if (Integer.parseInt(cur.getString(
                    cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                  pCur = cr.query(
                         ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                         null, 
                         ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                         new String[]{id}, null);
                 while (pCur.moveToNext()) {
                     phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                 // setContact(name,phoneNo);
                     System.out.println("name"+name+"ph no"+phoneNo);
                     list1.add(name+"\n"+phoneNo);
            //       Toast.makeText(this, "Name: " + name + ", Phone No: " + phoneNo, Toast.LENGTH_SHORT).show();


                 } 

            pCur.close();
          }
        }
    }




}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    // TODO Auto-generated method stub
    String s = lv.getItemAtPosition(arg2).toString();

    Log.i("my msg", s.substring(0, s.indexOf("\n")));

    Toast.makeText(this, s.substring(s.indexOf("\n")+1,s.length() ),1 ).show();
}  

}

I received null in some contacts.

I verified my code to find out that when querying phone numbers I was using ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER then I changed to ContactsContract.CommonDataKinds.Phone.NUMBER that according to android docs it says.

The phone number as the user entered it.

and the code worked well.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM