【问题标题】:Receive contact changes (added, deleted and changed)接收联系人更改(添加、删除和更改)
【发布时间】:2012-01-14 18:45:09
【问题描述】:

不是每个联系人都有时间戳吗?

我需要收到联系人更改(添加、删除或更改)的通知。我已经实现了ContentObserver,但是通过这种方法,我只能在联系人发生更改时收到通知,但我不知道哪个联系人已被修改!有什么建议吗?

【问题讨论】:

  • @Giancario 我也面临着同样的情况。你能告诉我你是如何解决这个问题的吗?

标签: android contacts android-contacts contactscontract contentobserver


【解决方案1】:

检查 ContactsContract.RawContacts 专栏

int DIRTY 

read/write Flag 表示 VERSION 已更改,并且该行需要由其拥有的帐户同步。只要原始联系人更改,该值就会自动设置为“1”,除非 URI 指定了 CALLER_IS_SYNCADAPTER 查询参数。同步适配器应始终提供此查询参数以防止不必要的同步:用户更改服务器上的一些数据,同步适配器更新手机上的联系人(不带 CALLER_IS_SYNCADAPTER 标志)标志,设置 DIRTY 标志,触发同步到将更改带到服务器。

当联系人被修改时,同步适配器使用此列开始同步联系人。 检查你是否从中得到任何东西。

【讨论】:

  • 我知道这个字段,但我需要复制 Android 设备上的 saparete DB 中的所有联系人。问题是如果我更改联系人,Dirty 字段设置为 1,但如果我在我打开我的 App 之前同步这个联系人和相关帐户,Dirty 字段设置为 0。你认为我可以使用 Service 来捕获所有更改并将所有 Dirty 标志已修改的 Id 存储在单独的数组中(例如)???
  • 我没有使用脏字段。但它应该通过手动更新查询进行修改。不要使用服务来监视更改,而是使用 Singleton 或 Application 类来检查联系人的任何更改。
  • 即使我的应用程序没有运行,Singleton 也会运行???你能给我一个例子来说明我如何使用单例来检查联系人的任何变化吗???我需要将 ContentObserver 放入 Singleton 中吗?
  • 您可以扩展应用程序类并将您的观察者放入其中,只要您的应用程序已安装,即使您的应用程序中的活动不活动,它也会处于活动状态。检查这个groups.google.com/group/android-developers/browse_thread/thread/…
  • @om252345 请你看看我的问题issue
【解决方案2】:

我不得不做类似的事情。我所做的是根据时间戳进行同步。我使用该字段跟踪联系人的最新更新时间:

ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP

然后我继续我的同步操作,每次都将我的成员变量更新为最新的同步时间。同步完成后,这是最后一次联系人同步时间。

当变更观察者注册某些内容时,我会向内容提供者查询在此时间之后受影响的所有行。然后我遍历游标并处理每一行。

【讨论】:

  • 但是如果实际的联系人ID随着更新而改变呢?您如何识别它正在更新?还是你只是删除和添加?
猜你喜欢
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
  • 1970-01-01
相关资源
最近更新 更多