SyncAdapter 用于检测设备本地联系人列表的变化
Posted
技术标签:
【中文标题】SyncAdapter 用于检测设备本地联系人列表的变化【英文标题】:SyncAdapter for detecting changes in device's native contacts list 【发布时间】:2014-03-16 17:52:13 【问题描述】:我之前使用 ContentObserver 来获取有关设备联系人列表更改的通知。 问题是我需要它在后台工作(当应用程序也关闭时),所以我为此使用了一个服务,但它仍然不起作用(除非我声明该服务在前台工作 - 我们没有希望发生这种情况)。
所以我看到了另一个使用 SyncAdapter 的解决方案。 我有自己的存储解决方案,我没有在我的应用程序中使用 ContentProvider。 我也有自己的实现来检测哪些联系人已被添加/删除/更改。
我唯一需要的是检测何时发生并得到通知。
我需要存根内容提供者来实现吗? 将 com.android.contacts 声明为同步适配器的权限就足够了吗?
我需要一些帮助来配置这些...
提前致谢! 罗特姆。
【问题讨论】:
【参考方案1】:好的。所以我终于想通了。
要实现这一点(仅收到有关设备联系人更改的通知),您不需要存根内容提供程序。 只需声明一个带有同步适配器服务的同步适配器。 在同步适配器的 xml 声明中,使用 ContactsContract.AUTHORITY 这意味着: android:contentAuthority="com.android.contacts"
并设置自动同步: ContentResolver.setSyncAutomatically(account, ContactsContract.AUTHORITY, true);
请记住,不会立即调用 SyncAdapter 实现中的 onPerformSync 方法,系统会“等待”进行这些同步的最佳时间,根据我的经验,这需要大约 40 秒。
【讨论】:
这是错误的。 'setSyncAutomatically' 与 'network tickle' 相关,与联系人更改无关。以上是关于SyncAdapter 用于检测设备本地联系人列表的变化的主要内容,如果未能解决你的问题,请参考以下文章
Android自定义账户类型和同步适配器模式 Custom Account Type & SyncAdapter