2016-05-07 2 views
1

Я пытаюсь получить номер телефона из разрешений «Контакты с API 23», но номер телефона всегда возвращает пустую строку. Разрешение на получение контактов проверено, и контакт отображается как действительный, но телефонное поле, похоже, не существует для какого-либо контакта. «cr.query ...», похоже, ничего не возвращает, потому что «while (phones.moveToNext)» никогда не показывает true. Я использую приведенный ниже код, чтобы получить номер телефона. Любые идеи, почему номер телефона не отображается для каких-либо контактов?Phone.NUMBER возвращает пустой для всех контактов

   ContentResolver cr = getContentResolver(); 
       cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
       if (cursor.moveToFirst()) { 
        String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 

        Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
          ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); 
        while (phones.moveToNext()) { 
         String number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
         int type = phones.getInt(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); 
         switch (type) { 
          case ContactsContract.CommonDataKinds.Phone.TYPE_HOME: 
           // do something with the Home number here... 
           break; 
          case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE: 
           PhoneNumber = number; 
           break; 
          case ContactsContract.CommonDataKinds.Phone.TYPE_WORK: 
           // do something with the Work number here... 
           break; 
         } 
        } 
        phones.close(); 
       } 
       cursor.close(); 

UPDATE: Не уверен, почему этот метод не работает, но нашел другой метод, который делает работу.

 Uri result = data.getData(); 
     String id = result.getLastPathSegment(); 
     cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", new String[] { id }, null); 
    int phoneIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA); 

     if (cursor.moveToFirst()) { 
        PhoneNumber = cursor.getString(phoneIdx).toString(); 
       } 

Этот метод работает нормально.

+0

Вы можете написать свой полный код с ошибкой журнала кошачьей – AndroidHacker

+0

Там не было никакой ошибки, просто пустой телефон строка , Я отредактировал сообщение выше, чтобы показать метод, который работает. Проверенный телефон - это Nexus 6P, в случае, если это имеет значение. – user2431174

ответ

0

Вы можете попробовать использовать следующий метод, чтобы получить подробную информацию номера телефона с помощью ContactContract:

private void retrieveContactNumber() { 

    String contactNumber = null; 

    // getting contacts ID 
    Cursor cursorID = getContentResolver().query(uriContact, 
      new String[]{ContactsContract.Contacts._ID}, 
      null, null, null); 

    if (cursorID.moveToFirst()) { 

     contactID = cursorID.getString(cursorID.getColumnIndex(ContactsContract.Contacts._ID)); 
    } 

    cursorID.close(); 

    Log.d(TAG, "Contact ID: " + contactID); 

    // Using the contact ID now we will get contact phone number 
    Cursor cursorPhone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
      new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER}, 

      ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND " + 
        ContactsContract.CommonDataKinds.Phone.TYPE + " = " + 
        ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE, 

      new String[]{contactID}, 
      null); 

    if (cursorPhone.moveToFirst()) { 
     contactNumber = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
    } 

    cursorPhone.close(); 

    Log.d(TAG, "Contact Phone Number: " + contactNumber); 
} 
Смежные вопросы