Я пытаюсь получить номер телефона из разрешений «Контакты с 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();
}
Этот метод работает нормально.
Вы можете написать свой полный код с ошибкой журнала кошачьей – AndroidHacker
Там не было никакой ошибки, просто пустой телефон строка , Я отредактировал сообщение выше, чтобы показать метод, который работает. Проверенный телефон - это Nexus 6P, в случае, если это имеет значение. – user2431174