2017-01-13 7 views
-2

Ниже приведен код, который я использовал для получения всех контактов с телефона.Не удается получить все контакты при использовании ContactsContract.CommonDataKinds.Phone

 public static ArrayList<Recipient> getAllRecipient(Context context) { 

     ArrayList<Recipient> contacts = new ArrayList<>(); 
     Cursor cursor = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); 

     if (cursor != null) { 
      try { 
       final int displayNameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); 
       final int numberIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
       final int typeIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE); 
       final int uriIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI); 

       String displayName, number, uri; 
       while (cursor.moveToNext()) { 

        int type = cursor.getInt(typeIndex); 
        if (type == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) { 
         displayName = cursor.getString(displayNameIndex); 
         number = cursor.getString(numberIndex); 
         number = number.replaceAll("[^0-9+]+", "");//remove all special character and space, just keep digit number and "+" 
         uri = cursor.getString(uriIndex); 
         Recipient recipient = new Recipient(displayName, number, uri); 
         contacts.add(recipient); 
        } 
       } 
      } catch (Exception e) { 
       LogUtil.debug("can't get recipient: " + e.getMessage()); 
      } finally { 
       cursor.close(); 
      } 
     } 
     cursor.close(); 
     return contacts; 
    } 

Я получил обратную связь от многих пользователей, они не могут получить полные контакты в своих телефонах, показывают почти контакты, но пропустил какие-то контакты.

Есть ли проблемы с кодом выше? Благодарю.

ответ

0

Используйте этот код

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); 
while (phones.moveToNext()) 
{ 


String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 


String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

} 
phones.close(); 
0

Phone.CONTENT_URI включает в себя все элементы телефона на устройстве. Если у контакта нет какого-либо телефона, вы не получите никакой информации об этом. Если контакты - это то, что вам нужно, вы должны запросить ContactsContract.Contacts.CONTENT_URI.

Имейте в виду, что контакты и телефон - две отдельные вещи для Android. Не все контакты имеют номера телефонов, и вам придется запрашивать номера отдельно.

Смежные вопросы