2017-10-11 5 views
2

J'ai contact ajouté à mon carnet d'adresses qui a plusieurs numéros comme ci-dessous. Je veux aller chercher tous les 3 "User" en utilisant ContactsContract contenu uri. En utilisant le code ci-dessous j'ai eu un seul contact.obtenir tous les numéros de téléphone mobile associé à un contact android

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(); 
    } 

Répondre

1

De cette blogpost Si un contact a plusieurs numéros de téléphone, vous pouvez alors récupérer tous les numéros de téléphone et d'autres détails à l'aide d'Android Cours intégrés (Cursor et ContactsContract) dans Android. Et vous devez récupérer le numéro de contact basé sur le type de téléphone comme (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(); 
    } 
} 
0

ici est le code pour aller chercher tous les numéros de téléphone d'un contact

String id, name; 
ContentResolver cr = getContentResolver(); 
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; 
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, sortOrder); 

if (cur.getCount() > 0) { 

    while (cur.moveToNext()) { 
     id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
     name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     Log.i(tag, "Id is " + id + "\t Name is" + name); 

     if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 

      Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 

       null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { 
        id 
       }, null); 

      // this second loop will retrieve all the contact numbers for a paricular contact id 
      while (pCur.moveToNext()) { 
       // Do something with phones 

       int phNumber = pCur.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER); 

       String phn = pCur.getString(phNumber); 

       Log.i("phn number", phn); 
      } 
      pCur.close(); 

     } 

    } 

}