我一直在ICS的框架中工作,看来Android Contacts Provider中的ContactsProvider2调用了 任何插入/更新后的notifyChange,不仅如此,它通过以下方式执行:
NotifyChange(ContactsContract.AUTHORITY_URI, null, syncToNetwork);
这意味着联系人AUTHORITY Uri上的任何插入/更新/删除都会触发内容观察者获取更新。虽然从理论上讲,这是相当不错的......看起来它也会通过Presence更新来触发。
如果我尝试在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查询中..但看起来它已经改变了..