2013-02-12 64 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

相關問題