2

我已经使用 ContactsContract api 一段时间了,我遇到了在 ContactsContract.Contacts 的 API 页面中列出的两个“列”,它们似乎实际上无法评估。

值是(在列标题下):“NAME_RAW_CONTACT_ID”和“DISPLAY_NAME_PRIMARY”

通过我对 API 的阅读,这两个值似乎与用于构造给定联系人的显示名称的结构化名称(在 DATA 中)相关联。目前,直接从联系人表中访问它对我来说非常有用,但据我所知,它们实际上并不在工作 api 中(我已经针对 2.1 和 2.2 进行了测试)。

Contacts 对象中不存在关联的常量,并且尝试直接访问字段(通过使用我在在线代码转储中看到的小写字符串版本)会出现 sql 错误——如您所料,列无效.

有没有人在访问这些方面有更好的运气?这些实际上在 API 中吗?

编辑:我做了更多检查,这里有一些来自 RawContacts 的相关值,这些值在 API 上列出,但似乎实际上并不在其中:DISPLAY_NAME_ALTERNATIVE、DISPLAY_NAME_PRIMARY、DISPLAY_NAME_SOURCE、PHONETIC_NAME、PHONETIC_NAME_STYLE、SORT_KEY_ALTERNATIVE 和 SORT_KEY_PRIMARY。

所有这些似乎都是 API 中尚未包含的功能,在发布 javadoc 时错误地没有过滤掉这些功能。如果其他人也无法访问这些功能,则可能值得提交一份错误报告。

4

3 回答 3

0

你提到的这些项目很有趣。在它说“自 API 级别”的地方没有提到任何级别。我认为错误报告是有序的。

于 2010-11-24T00:13:25.003 回答
0

我也发现了同样的事情。当我浏览本机联系人应用程序时,他们一直在使用 DISPLAY_NAME_ALTERNATIVE 。在 API 中,他们在界面中列出了这些

http://developer.android.com/reference/android/provider/ContactsContract.DataColumnsWithJoins.html

我还提取了本地联系人并检查了 raw_contacts 表。在那里我能够找到“display_name_alt”作为一个库。

所以我不知道该怎么做。我不知道列的名称是否有帮助

于 2011-03-02T14:55:22.447 回答
0

我还想使用其中一些字段(2.2 版),但 ContactsContract.DataColumnsWithJoins.DISPLAY_NAME_ALTERNATIVE 静态字符串不可见。所以我直接将它的值用于查询,“display_name_alt”,我有那个字段的数据。

我还使用了查询所有字段(将 null 放入 managedQuery() 函数的“String[] projection”变量)并检索了所有字段。我在 sortOrder 变量中插入了一个错误,以检索错误和自动创建的 SQL。所以SQL是这样的

near "mimetype": syntax error: , while compiling:
SELECT 
data_version, 
phonetic_name, 
phonetic_name_style, 
contact_id, 
lookup, 
data12, 
data11, 
data10, 
mimetype, 
data15, 
data14, 
data13, 
display_name_source, 
data_sync1, 
data_sync3, 
data_sync2, 
data_sync4, 
account_type, 
custom_ringtone, 
status_update_id, 
status_updates.status AS status, 
data1, 
data4, 
data5, 
data2, 
data3, 
data8, 
account_type  AS ext_account_Type, 
data9, 
group_sourceid, 
data6, 
account_name, 
data7, 
display_name, 
in_visible_group, 
display_name_alt, 
contacts_status_updates.status_res_package AS contact_status_res_package, 
is_primary, 
contacts_status_updates.status_ts AS contact_status_ts, 
raw_contact_id, 
times_contacted, 
contacts_status_updates.status AS contact_status, 
status_updates.status_res_package AS status_res_package, 
status_updates.status_icon AS status_icon, 
contacts_status_updates.status_icon AS contact_status_icon, 
presence.mode AS mode, 
version, 
last_time_contacted, 
res_package, _id, 
name_verified, 
status_updates.status_ts AS status_ts, 
dirty, 
is_super_primary, 
photo_id, 
send_to_voicemail, 
name_raw_contact_id, 
contacts_status_updates.status_label AS contact_status_label, 
status_updates.status_label AS status_label, 
sort_key_alt, 
starred, 
sort_key, 
agg_presence.mode AS contact_presence, 
sourceid 
FROM
 view_data_restricted data
 LEFT OUTER JOIN agg_presence ON (agg_presence.presence_contact_id=contact_id)
 LEFT OUTER JOIN status_updates contacts_status_updates ON (status_update_id=contacts_status_updates.status_update_data_id)
 LEFT OUTER JOIN presence ON (presence_data_id=data._id)
 LEFT OUTER JOIN status_updates ON (status_updates.status_update_data_id=data._id) 
WHERE (1) 
ORDER BY contact_id mimetype

所以你可以看到所有可用的字段。

我不知道如何从 Uri 中获取带有 SQL 字符串的 Cursor,例如 rawQuery() ...

于 2011-06-07T16:56:20.553 回答