Лучший способ прочитать необработанный контакт вместе со всеми связанными с ним данными - использовать каталог ContactsContract.RawContacts.Entity
.Если в необработанном контакте есть строки данных, курсор сущности будет содержать строку для каждой строки данных.Если в необработанном контакте нет строк данных, курсор все равно будет содержать одну строку с необработанной информацией об уровне контакта.
Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId);
Uri entityUri = Uri.withAppendedPath(rawContactUri, Entity.CONTENT_DIRECTORY);
Cursor c = getContentResolver().query(entityUri,
new String[]{RawContacts.SOURCE_ID, Entity.DATA_ID, Entity.MIMETYPE, Entity.DATA1},
null, null, null);
try {
while (c.moveToNext()) {
String sourceId = c.getString(0);
if (!c.isNull(1)) {
String mimeType = c.getString(2);
String data = c.getString(3);
//decide here based on mimeType, see comment later
}
}
} finally {
c.close();
}
Вам нужно будет отфильтровать результат на основе mimeType
Например, если mimeType равен Phone.CONTENT_ITEM_TYPE
, то в столбце DATA1
хранится номер телефона, но если тип данных равен Email.CONTENT_ITEM_TYPE
, тогда DATA1
сохраняет адрес электронной почты.
Таким образом, вам не нужно будет использовать HAS_PHONE_NUMBER
, поскольку вы будете напрямую перебирать элементы.