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原生联系人应用程序删除每个帐户联系人

共享首选项不适用于 ListView 中的联系人

Android自定义账户类型和同步适配器模式 Custom Account Type & SyncAdapter

Android自定义账户类型和同步适配器模式 Custom Account Type & SyncAdapter

根据帐户设置调用的顺序未调用 SyncAdapter

检索附加了特定帐户的所有联系人