Ответ 1
Телефонные номера
Телефонные номера хранятся в их собственной таблице, и их необходимо запрашивать отдельно. Чтобы запросить таблицу телефонных номеров, используйте URI, хранящийся в переменной SDK ContactsContract.CommonDataKinds.Phone.CONTENT_URI. Используйте WHERE, чтобы получить номера телефонов для указанного контакта.
if (Integer.parseInt(cur.getString(
cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor pCur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
new String[]{id}, null);
while (pCur.moveToNext()) {
// Do something with phones
}
pCur.close();
}
Выполните второй запрос к базе данных SQLite для контактов Android. Номера телефонов запрашиваются против URI, хранящихся в ContactsContract.CommonDataKinds.Phone.CONTENT_URI. Идентификатор контакта сохраняется в телефонной таблице как ContactsContract.CommonDataKinds.Phone.CONTACT_ID, а предложение WHERE используется для ограничения возвращаемых данных.
Адреса электронной почты
Запрос адресов электронной почты похож на номера телефонов. Для получения адресов электронной почты из базы данных необходимо выполнить запрос. Запросите URI, хранящийся в ContactsContract.CommonDataKinds.Email.CONTENT_URI, чтобы запросить таблицу адресов электронной почты.
Cursor emailCur = cr.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
new String[]{id}, null);
while (emailCur.moveToNext()) {
// This would allow you get several email addresses
// if the email addresses were stored in an array
String email = emailCur.getString(
emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
String emailType = emailCur.getString(
emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
}
emailCur.close();
Как и в случае с телефонным запросом, имена полей для таблицы электронной почты также хранятся в разделе ContactsContract.CommonDataKinds. Запрос электронной почты выполняется в URI в ContactsContract.CommonDataKinds.Email.CONTENT_URI, а предложение WHERE должно соответствовать полю ContactsContract.CommonDataKinds.Email.CONTACT_ID. Поскольку несколько адресов электронной почты могут быть сохранены в цикле через записи, возвращаемые в Курсор.
Дополнительные учебники здесь
Для этого метода требуется Android API версии 5 или выше.