我从模拟器(API 19)中拉出了contacts2.db并检查了联系人表。 contacts table
它没有display_name列。
但是,执行以下代码后,
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, REQUEST_CONTACT);
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_OK) {
return;
}
if (requestCode == REQUEST_DATE) {
...
} else if (requestCode == REQUEST_CONTACT && data != null) {
Uri contactUri = data.getData();
// Perform your query - the contactUri is like a "where" clause here
Cursor c = getActivity().getContentResolver().query(contactUri
, null
, null
, null
, null);
//cursor null check
try {
// Double-check that you actually got results
if (c.getCount() == 0) {
return;
}
c.moveToFirst();
String[] names = c.getColumnNames();
} finally {
c.close();
}
}
}
当我检查名称时,列的列表是
sort_key
photo_uri
send_to_voicemail
contact_status
contact_status_label
pinned
display_name
phonebook_label_alt
phonebook_bucket
contact_status_res_package
photo_id
in_default_directory
custom_ringtone
_id
times_contacted
phonebook_label
lookup
display_name_alt
phonetic_name
last_time_contacted
contact_last_updated_timestamp
has_phone_number
in_visible_group
is_user_profile
display_name_source
photo_file_id
contact_status_ts
phonebook_bucket_alt
sort_key_alt
contact_presence
starred
photo_thumb_uri
contact_status_icon
contact_chat_capability
phonetic_name_style
name_raw_contact_id
它包含display_name列。怎么可能?
答案 0 :(得分:0)
您知道ContactsContract。
从docs关于合同类
该类通过确保即使URI的实际值,列名等更改等都可以正确访问提供程序,也可以在提供程序和其他应用程序之间建立合同。 / p>
因此提供商将display_name
列转换为实际 display_name并发出请求。然后根据ContactsContract.