2017-01-18 25 views
0

我试图了解最近几周同步适配器的整体概念,并且对功能有几个问题。Android - 听取android联系人中的更改并获取增量

我要听所有的变化中的Android通讯录

方法1:

我创建了一个自定义帐户,并创建了同步适配器。 书面广播听众听ContactsContract.Contacts.CONTENT_URIContentObserver类我打电话ContentResolver.requestSync(account,ContactsContract.AUTHORITY,bundle)这是作为一个触发点时,曾经有一个变化的联系人数据开始同步适配器的 public void onChange(boolean selfChange)

一切都看起来不错,直到这里,但在SyncAdapter类我不是onPerofmSync

获得在SyncResult变量的任何数据,我怎样才能从接触增量变化?

如果这不是触发同步适配器的方法,请纠正我。

方法2:

我跟随他们在谈论查询哪里dirtyFlag设置为1 我是能够得到改变的联系人数据库的一些例子,但我的问题是

谁会将dirtyFlag的值设置回'0'?

如果我必须这样做,那么可以说在手机上有多个应用程序可以做同样的事情。如果某些应用程序在我的应用程序尝试访问信息之前将该标志设置为“0”。我会错过所有的变化。

方法3:

查询数据库,并跟踪version在我自己的数据库中的每个接触和“版本”已经改变认为,在接触的变化。这看起来像一个沉重的过程。

最后,我的问题是什么是最好的方式来聆听用户设备上 联系人的变化?

回答

0

你可以做的是坚持(可能使用本地MySql数据库)Contacts.LOOKUP_KEY及其RawContacts.VERSION值之间的映射。

一旦你得到一个广播一个变化在Contacts DB发生(通过onChange)您查询所有RawContacts.VERSION S和他们的Contacts.LOOKUP_KEY和比较,您的前已经持续,如果他们中的一个改变,你的状态知道联系人改变了。

+0

是的,这是我的问题中的第三种方法。 – Prakash

+1

是的,所以这就是我会做的,这不是一个很繁重的过程,并且我没有办法在没有查询的情况下通过所有联系人进行此操作。 – marmor

+0

因此,每次有“registerContentObserver(ContactsContract.Contacts.CONTENT_URI”调用的最小触发器,我们应该执行整个联系人查询以查看发生了什么变化与我们有什么变化? –