Android 中的联系人同步适配器

14

我希望在我的应用程序中使用同步适配器将本地和第三方联系人(除了FB)与服务器同步。(只进行客户端到服务器的单向同步)

我有两个疑问 -

1)如果设备中存在多个同步适配器,并且另一个同步适配器已经清除了“dirty bit”,那么我的同步适配器是否能够立即检测到联系人的更改/更新。

2)我已经使用了

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

同步联系人到服务器。

它每30秒开始同步。

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

我需要同时使用观察器吗?

2个回答

3
为了查看联系人的更改,您需要向ContentResolver注册一个观察者。同步API并不旨在监视每个更改,而是旨在成为Android自动定期运行的后台API,以便可以批处理操作并更有效地使用网络,当网络被禁用时不运行等等...
脏位是基于每个帐户使用的。通常情况下,同步被设计为每个联系人拥有一个“所有”帐户,并且不适用于将设备上的所有联系人导出到特定服务。有一个聚合过程来处理来自多个帐户的联系人加入到用户看到的一个“联系人”中。请参见:

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

如需更多关于此操作的信息,请参考相关文档。

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


2

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

因此,您需要创建本地数据库,以比较先前的版本和当前的版本。如果发生任何更改,就会触发更新查询。

要获取更多信息,请访问此处

这个版本对我的同步更新很有帮助。所以我分享这个答案给大家。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接