Android:听取像WhatsApp这样的联系人更改

时间:2015-06-28 18:02:05

标签: android android-contentprovider android-contentresolver android-syncadapter

我正在构建一个严重依赖用户联系人的应用程序。

我已创建Account并在需要时代表此帐户创建RawContacts
我使用SyncAdapter,事情很棒。

但我仍然缺少这个难题的某些部分:

我试图实现类似于WhatsApp的行为。这样 -

当任何联系人的姓名或电话发生变更时 - 会将其发送到服务器进行评估

此联系人是否已经在"我的" RawContacts,他是否刚刚由用户创建。

我知道有ContentObserver,但跟踪ContactsContract.Contacts.CONTENT_URI似乎是错误的做法,因为它没有给出具体的更改,而且它被提升到很多次,以及许多对我不感兴趣的活动。

我知道WhatsApp正在使用SyncAdapter,但我认为他们可能会做更多的事情。

任何想法都会非常感激。

1 个答案:

答案 0 :(得分:1)

ContentObserver跟踪ContactsContract.Contacts.CONTENT_URI确实是可行的方法。

当您获得onChange()时,您会使用以下条件查询raw_contacts表:

String where = "(rawcontacts.dirty = true or rawcontacts.deleted = 1) and rawcontacts.account_type = <your_custom_type>"

结果将为您添加,更新或删除联系人。

如果您有兴趣了解更多详细信息 - 您需要订阅ContactsContract.Contacts.CONTENT_URI的原因是联系人提供商目前不会通知在onChange()中修改了哪些联系人。这是因为多个联系人可能会发生变化的applyBatch()次交易。可能在将来会有一种订阅子集的方法 - 但目前没有。