【发布时间】: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