Android API ContactsContract хранятся в трех разных таблицах: Contacts
, RawContacts
и Data
.
Вы получаете временное разрешение на чтение данных через contactUri
, что означает, что выможет читать только данные из таблицы Contacts
и только для выбранного контакта.
Это поля, которые хранятся в таблице Contacts
, которую вы можете получить, другие поля, такие как телефон, электронная почта и т. д.. хранятся в таблице Data
и требуют разрешения READ_CONTACTS
_id
contact_chat_capability
contact_last_updated_timestamp
contact_presence
contact_status
contact_status_icon
contact_status_label
contact_status_res_package
contact_status_ts
custom_ringtone
dirty_contact
display_name
display_name_alt
display_name_reverse
display_name_source
has_email
has_phone_number
in_default_directory
in_visible_group
is_private
is_user_profile
last_time_contacted
link
link_count
link_type1
lookup
name_raw_contact_id
phonebook_bucket
phonebook_bucket_alt
phonebook_label
phonebook_label_alt
phonetic_name
phonetic_name_style
photo_file_id
photo_id
photo_thumb_uri
photo_uri
pinned
sec_custom_alert
sec_custom_vibration
sec_led
send_to_voicemail
sort_key
sort_key_alt
starred
times_contacted
ЧТО ВЫ МОЖЕТЕ СДЕЛАТЬ
Если вам нужен один из следующих элементов данныхо контакте: телефон, электронная почта, адрес, вы можете переключиться на использование определенного намерения ACTION_PICK, запрашивающего этот конкретный тип, и тогда у вас будет доступ к одному элементу информации о выбранном контакте.Например, если вашему приложению нужен номер телефона выбранного контакта, выполните следующие действия:
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(intent, PICK_CONTACT_REQUEST);
Затем в onActivityResult вы получите выбранный контакт + телефон:
if (resultCode == RESULT_OK) {
Uri phoneUri = data.getData();
Cursor cursor = getContentResolver().query(phoneUri, null, null, null, null);
DatabaseUtils.dumpCursor(cursor);
}