【问题标题】:Android ContactsContract.Contact missing constants from the API?Android ContactsContract.Contact API 中缺少常量?
【发布时间】:2010-09-30 01:52:59
【问题描述】:

我使用 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 时错误地没有过滤掉。如果其他人也无法访问这些功能,则可能值得提交错误报告。

【问题讨论】:

    标签: android android-2.2-froyo contactscontract android-2.1-eclair


    【解决方案1】:

    你提到的这些项目很有趣。 在上面写着"since API level" 的地方没有提到任何级别。 我认为应该提交错误报告。

    【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 鉴于联系人后端的更改频率,最好不要直接尝试访问表/列名。当我试图超越 API 所做的事情时,我已经被烧死了。我想我们将不得不等到这部分最终确定并同时解决问题。
    • 由于我们使用的是内容提供者,我们实际上并没有访问后端数据库的权限。即使我们可以,在此基础上构建应用程序也是一个非常糟糕的主意,因为只有 API 接口才能保证不会发生重大变化。补丁更新可能会改变表格,您的应用会在没有通知的情况下停止工作。
    【解决方案3】:

    我还想使用其中一些字段(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() ...

    【讨论】:

    • 原始查询不适用于内容提供者。 (见上面帖子的cmets)
    猜你喜欢
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 2018-01-13
    • 2013-07-28
    • 2014-12-20
    • 2010-09-16
    相关资源
    最近更新 更多