【问题标题】:Android: Listening to contact changes like WhatsApp doAndroid:像 WhatsApp 一样监听联系人变化
【发布时间】:2015-06-28 18:02:05
【问题描述】:

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

我已经创建了一个Account,并在需要时代表该帐户创建了RawContacts
我使用SyncAdapter,一切都很棒。

但我仍然错过了这个难题的某些部分:

我正在尝试实现类似于 WhatsApp 的行为。这样——

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

此联系人是否已经在“我的”RawContacts 中,是否是用户现在刚刚创建的。

我知道有 ContentObserver,但跟踪 ContactsContract.Contacts.CONTENT_URI 似乎是错误的做法,因为它没有给出具体的变化,而且它会被多次提升,并且会出现很多不感兴趣的事件我。

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

任何想法将不胜感激。

【问题讨论】:

  • @Hagai...你好,关于你如何解决这个问题的任何更新?我在我的代码中使用了 CONTACT_LAST_UPDATED_TIMESTAMP 来获取最新更新的联系人,但是如果您更新联系人中只有电子邮件 ID 的任何字段,此标记不会更改。
  • @Hagai...您好...如果您可以通过回答自己的问题来分享您的发现(如果您已成功解决),那就太好了。
  • 嗨,几年过去了......据我所知 - 我没有得到足够好的答案来满足我的需要。

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


【解决方案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() 事务可能会更改多个联系人。将来可能会有订阅子集的方法 - 但目前还没有。

【讨论】:

  • 如果您能在onChange() 中发布一个完整的示例来说明如何执行query,那就太好了。
猜你喜欢
  • 2014-01-17
  • 2017-06-03
  • 2013-01-20
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
相关资源
最近更新 更多