【问题标题】:Android ContentObserver - Contacts - No presence updatesAndroid ContentObserver - 联系人 - 无状态更新
【发布时间】:2013-02-12 19:54:52
【问题描述】:

我一直在关注 ICS 的框架,看起来 Android Contacts Provider 中的 ContactsProvider2 调用 notifyChange 在任何插入/更新之后,不仅如此,它还通过:

NotifyChange(ContactsContract.AUTHORITY_URI, null, syncToNetwork);

这意味着在联系人 AUTHORITY Uri 上的任何插入/更新/删除都会触发内容观察者获取更新。虽然从理论上讲,这是相当不错的。它似乎也可以通过状态更新来触发。

如果我尝试在 Data 表上拉一个光标,它也会将数据表链接到 Presence,并且 Presence 的任何更新都会调用 onLoadFinished (CursorLoader)。

查看光标问题,看起来是因为 ContactsProvider2 调用

setTablesAndProjectionMapForData() 

依次将 Presnce/status 列附加到每个数据行。

appendContactPresenceJoin(sb, projection, RawContacts.CONTACT_ID);
appendContactStatusUpdateJoin(sb, projection, ContactsColumns.LAST_STATUS_UPDATE_ID);
appendDataPresenceJoin(sb, projection, DataColumns.CONCRETE_ID);
appendDataStatusUpdateJoin(sb, projection, DataColumns.CONCRETE_ID);

是否有任何方法可以注册内容观察者以获取数据表更改的更新,而实际上不获取 Presence 更改的更新?我相信存在曾经被排除在 2.3 / 3.x 中的 Data.CONTENT_URI 查询中。但看起来它已经改变了..

【问题讨论】:

    标签: android contentobserver user-presence


    【解决方案1】:

    【讨论】:

    • 不要认为这会起作用,因为这引用了一个联系人。我的问题是在企业环境中。有点难以解释,但我们有一个提供程序,它异步聚合来自设备资源和设备资源的多个结果,每次返回它都会通知更改。对于在设备上,我们通过游标加载器访问此列表。但是通知更新会不断流入,并导致我们尝试重新合并数据库中的其他数据。过于复杂的用例,我不记得我们现在所做的解决方案了..
    猜你喜欢
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多