Android 并非所有联系人都返回
我已绑定到使用以下代码获取所有联系人Android 并非所有联系人都返回,android,Android,我已绑定到使用以下代码获取所有联系人 getContentResolver().query(uri, null, null, null, null) 但它不会返回所有联系人。它似乎只返回列“single_is_restricted”值“1”中的联系人,但此列无法从应用程序中进行组装,我是在通过sqlite直接查看表“contacts”时发现它的 如何获取所有联系人 谢谢。检查表/视图的create语句 例如,在示例中,您将看到此代码块 private Cursor getContacts()
getContentResolver().query(uri, null, null, null, null)
但它不会返回所有联系人。它似乎只返回列“single_is_restricted”值“1”中的联系人,但此列无法从应用程序中进行组装,我是在通过sqlite直接查看表“contacts”时发现它的
如何获取所有联系人
谢谢。检查表/视图的create语句 例如,在示例中,您将看到此代码块
private Cursor getContacts()
{
// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" +
(mShowInvisible ? "0" : "1") + "'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}
如果您可以获得一个异常(例如,您可以更改选择…),您可以从log cat获得视图/表名,如下所示(您可以在log cat中看到“ASDF”,只需获得一个异常)
重点是,<代码>来自视图\u联系人\u受限
现在您可以检查此视图的create语句。您可以安装根浏览器应用程序。并将sqlite文件复制到SD卡或将sqlite3安装到Android设备。然后从命令行打开数据库
sqlite3 '/home/semeteycoskun/Desktop/contacts2.db'
检查视图
.schema view_contacts_restricted
结果是
CREATE VIEW view_contacts_restricted
AS SELECT contacts._id AS _id
, contacts.custom_ringtone AS custom_ringtone
, name_raw_contact.display_name_source AS display_name_source
, name_raw_contact.display_name AS display_name
, name_raw_contact.display_name_alt AS display_name_alt
, name_raw_contact.phonetic_name AS phonetic_name
, name_raw_contact.phonetic_name_style AS phonetic_name_style
, name_raw_contact.sort_key AS sort_key
, name_raw_contact.sort_key_alt AS sort_key_alt
, name_raw_contact.sort_priority AS sort_priority
, name_raw_contact.sort_priority_alt AS sort_priority_alt
, name_raw_contact.sort_locale AS sort_locale
, name_raw_contact.sort_locale_alt AS sort_locale_alt
, name_raw_contact.contact_in_visible_group AS in_visible_group
, has_phone_number, lookup, photo_id
, contacts.last_time_contacted AS last_time_contacted
, contacts.send_to_voicemail AS send_to_voicemail
, contacts.starred AS starred
, contacts.times_contacted AS times_contacted
, status_update_id
, dirty_contact
, has_email
, link_count
, raw_contact_linkpriority1
, link_type1
, raw_contact_linkpriority2
, link_type2
, raw_contact_linkpriority3
, link_type3
, raw_contact_linkpriority4
, link_type4
, raw_contact_linkpriority5
, link_type5
FROM contacts
JOIN raw_contacts AS name_raw_contact ON(name_raw_contact_id=name_raw_contact._id)
WHERE single_is_restricted=0;
如果create语句包含single_is_restricted=0,则无法访问single_is_restricted=1的行
[对不起,我说的是英语]一些制造商,如三星,与Facebook达成了协议,Facebook通过姓名、电话、图片等同步到设备联系人。但这些联系人无法通过联系人API访问 这就是你的应用程序无法访问某些联系人,但在stock contacts应用程序中可见的原因
CREATE VIEW view_contacts_restricted
AS SELECT contacts._id AS _id
, contacts.custom_ringtone AS custom_ringtone
, name_raw_contact.display_name_source AS display_name_source
, name_raw_contact.display_name AS display_name
, name_raw_contact.display_name_alt AS display_name_alt
, name_raw_contact.phonetic_name AS phonetic_name
, name_raw_contact.phonetic_name_style AS phonetic_name_style
, name_raw_contact.sort_key AS sort_key
, name_raw_contact.sort_key_alt AS sort_key_alt
, name_raw_contact.sort_priority AS sort_priority
, name_raw_contact.sort_priority_alt AS sort_priority_alt
, name_raw_contact.sort_locale AS sort_locale
, name_raw_contact.sort_locale_alt AS sort_locale_alt
, name_raw_contact.contact_in_visible_group AS in_visible_group
, has_phone_number, lookup, photo_id
, contacts.last_time_contacted AS last_time_contacted
, contacts.send_to_voicemail AS send_to_voicemail
, contacts.starred AS starred
, contacts.times_contacted AS times_contacted
, status_update_id
, dirty_contact
, has_email
, link_count
, raw_contact_linkpriority1
, link_type1
, raw_contact_linkpriority2
, link_type2
, raw_contact_linkpriority3
, link_type3
, raw_contact_linkpriority4
, link_type4
, raw_contact_linkpriority5
, link_type5
FROM contacts
JOIN raw_contacts AS name_raw_contact ON(name_raw_contact_id=name_raw_contact._id)
WHERE single_is_restricted=0;