2013-02-12 103 views
0

我一直在ICS的框架中扎根,并且似乎Android插件提供程序中的ContactsProvider2在插入/更新后调用 notifyChange,不仅如此,它由:Android ContentObserver - 联系人 - 无在线更新

NotifyChange(ContactsContract.AUTHORITY_URI, null, syncToNetwork); 

这意味着,任何插入/更新/删除联系人AUTHORITY乌里触发内容观察家得到更新。虽然在理论上,这是非常好的。它似乎也是通过Presence更新来触发的。

如果我尝试在数据表上拖动光标,它也会将数据表链接到状态,并且状态的任何更新都有onLoadFinished被调用(CursorLoader)。

展望光标的问题,它看起来是因为ContactsProvider2调用

setTablesAndProjectionMapForData() 

这又追加Presnce(在线)/状态栏,每一个数据行。

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); 

有什么办法可以注册一个内容观察者获取数据表上的更新改变w/out实际上获取更新的存在改变吗?我相信过去从2.3/3.x中的Data.CONTENT_URI查询中排除了存在。但是看起来它已经改变了..

回答

0

CONTENT_VCARD_URI怎么样?

+0

不要以为这会起作用,因为这引用了单个联系人。我的问题是在企业环境中。有点难以解释,但我们有一个提供者异步聚合来自关闭和设备资源的多个结果,每次返回它就会通知一个改变。对于设备,我们通过光标加载器访问了这个列表。但通知更新将保持流入,并导致我们尝试重新与其他数据在数据库合并..过于复杂的用例,我不记得我们现在所做的解决方案.. – Chrispix 2015-08-21 15:27:35