2017-01-18 42 views
0

我試圖瞭解最近幾周同步適配器的整體概念,並且對功能有幾個問題。Android - 聽取android聯繫人中的更改並獲取增量

我要聽所有的變化中的Android通訊錄

方法1:

我創建了一個自定義帳戶,並創建了同步適配器。 書面廣播聽衆聽ContactsContract.Contacts.CONTENT_URIContentObserver類我打電話ContentResolver.requestSync(account,ContactsContract.AUTHORITY,bundle)這是作爲一個觸發點時,曾經有一個變化的聯繫人數據開始同步適配器的 public void onChange(boolean selfChange)

一切都看起來不錯,直到這裏,但在SyncAdapter類我不是onPerofmSync

獲得在SyncResult變量的任何數據,我怎樣才能從接觸增量變化?

如果這不是觸發同步適配器的方法,請糾正我。

方法2:

我跟隨他們在談論查詢哪裏dirtyFlag設置爲1 我是能夠得到改變的聯繫人數據庫的一些例子,但我的問題是

誰會將dirtyFlag的值設置回'0'?

如果我必須這樣做,那麼可以說在手機上有多個應用程序可以做同樣的事情。如果某些應用程序在我的應用程序嘗試訪問信息之前將該標誌設置爲「0」。我會錯過所有的變化。

方法3:

查詢數據庫,並跟蹤version在我自己的數據庫中的每個接觸和「版本」已經改變認爲,在接觸的變化。這看起來像一個沉重的過程。

最後,我的問題是什麼是最好的方式來聆聽用戶設備上 聯繫人的變化?

回答

0

你可以做的是堅持(可能使用本地MySql數據庫)Contacts.LOOKUP_KEY及其RawContacts.VERSION值之間的映射。

一旦你得到一個廣播一個變化在Contacts DB發生(通過onChange)您查詢所有RawContacts.VERSION S和他們的Contacts.LOOKUP_KEY和比較,您的前已經持續,如果他們中的一個改變,你的狀態知道聯繫人改變了。

+0

是的,這是我的問題中的第三種方法。 – Prakash

+1

是的,所以這就是我會做的,這不是一個很繁重的過程,並且我沒有辦法在沒有查詢的情況下通過所有聯繫人進行此操作。 – marmor

+0

因此,每次有「registerContentObserver(ContactsContract.Contacts.CONTENT_URI」調用的最小觸發器,我們應該執行整個聯繫人查詢以查看發生了什麼變化與我們有什麼變化? –