2012-07-31 3 views
0

Я использую следующий код для извлечения всего номера телефона из контактов.Получить все телефонные номера из контактов

Cursor c = context.getContentResolver().query(
         Data.CONTENT_URI, 
         new String[] { Phone.NUMBER }, 
         Data.MIMETYPE + "='" +  Phone.CONTENT_ITEM_TYPE 
           + "'", null, null); 

Он отлично работает на моем телефоне Android.

Но некоторые пользователи говорят, что мое приложение не получает все телефонные номера из контактов и только часть их. Я не могу понять причину ... почему?

+0

возможно дубликат [Читать номера телефонов всех контактные в андроиде] (http://stackoverflow.com/questions/2356084/read-all-contacts-phone-numbers-in-android) – Praveenkumar

+0

Нет. Мой вопрос почему это не работает. Он должен хорошо работать в соответствии с http://developer.android.com/intl/zh-CN/reference/android/provider/ContactsContract.Data.html –

ответ

3

Это приведет к тому, что курсор будет удерживать базовые контактные данные и будет прокручивать номера телефонов, которые имеют контакт, может иметь несколько.

Uri uri = data.getData(); 

Cursor cursor=ctx.getContentResolver().query(uri, null, null, null, null); 


while (cursor.moveToNext()) { 
    String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
    String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 

    if (Boolean.parseBoolean(hasPhone)) { 
        // You know have the number so now query it like this 
    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
      null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, 
      null, null); 

     while (phones.moveToNext()) { 
      String phoneNumber = phones.getString( 
        phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));     
     } 
     phones.close(); 
    } 
} 
+0

Но метод слишком медленный, если я хочу только всех телефонных номеров. В любом случае, спасибо за ответ. –

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