14

我想在我的应用程序中使用同步适配器将本机和第三方联系人(FB 除外)与服务器同步。(只有客户端到服务器的一种方式同步)

我在这里有两个疑问-

1)如果设备中有多个同步适配器,并且如果脏位已被另一个同步适配器清除,我的同步适配器是否能够立即检测到联系人更改/更新。

2)我用过

ContentResolver.setIsSyncable(account, ContactsContract.AUTHORITY, 1);
ContentResolver.setSyncAutomatically(account, ContactsContract.AUTHORITY, true);     

将联系人与服务器同步。

它确实每 30 秒启动一次同步。

但是我希望它在添加或删除或更新联系人以启动 perfromSync 操作时立即得到通知。

我也需要使用观察者吗?

4

2 回答 2

3

为了查看联系人的更改,您必须向 ContentResolver 注册一个观察者。同步 API 并不是要监视每一个变化,它是一个 Android 定期自动为你运行的后台 API,以便它可以批量操作和更有效地使用网络,而不是在禁用网络时运行等。 ..

脏位按每个帐户使用。一般来说,同步设计为每个联系人拥有一个“拥有”帐户,而不是设计用于将所有联系人从设备导出到特定服务。如用户所见,有一个聚合过程可以处理将来自多个帐户的联系人加入到一个“联系人”中。看:

http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html

有关其工作原理的更多信息。

如果您打算将设备上的所有联系人导出到您的服务,则需要遍历联系人并为您的服务插入原始联系人。然后,您还需要与观察者一起观察 ContentResolver,以查看用户何时在某些服务上添加新联系人或定期遍历表以查找您尚未导出的联系人。

于 2013-05-15T00:38:58.250 回答
2

使用版本位。如果任何联系人编辑它会自动增加 1。

所以你创建本地数据库来比较以前的版本和当前版本。如果发生任何更改,您将触发更新查询。

欲了解更多信息,请访问此处

此版本有助于我的同步更新。所以我把这个答案分享给大家。

于 2014-07-14T19:23:08.363 回答