Android - 收听Android联系人的变化并获取增量

时间:2017-01-18 16:27:37

标签: android android-contacts android-syncadapter

我试图了解过去几周内同步适配器的整体概念,并且对功能几乎没有任何疑问。

我想听听android联系人的所有变化

  

方法1:

我创建了一个自定义帐户,还创建了一个同步适配器。 写一个广播听众听ContactsContract.Contacts.CONTENT_URI并在 public void onChange(boolean selfChange)类的ContentObserver我正在呼叫ContentResolver.requestSync(account,ContactsContract.AUTHORITY,bundle),当联系人数据发生变化时,SyncResult充当启动同步适配器的触发点。

到目前为止一切正常但在SyncAdapter课程中我没有在onPerofmSync

中的dirtyFlag变量中获取任何数据
  

那么如何才能从联系人那里获得增量变化?

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

  

方法2:

我已经按照一些示例讨论了将dirtyFlag设置为1的联系人数据库。 我能够得到改变,但我的问题是

  

谁将version值设置回' 0' ?

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

  

方法3:

查询数据库并跟踪我自己数据库中每个联系人的long_string = "example example test test test test test test" x1, x2, *tests = long_string.split() tests = ' '.join(tests) print(tests) #test test test test test test 以及“'版本'已经改变认为这是一个联系的变化。这看起来很重要。

  

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

1 个答案:

答案 0 :(得分:-1)

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

一旦您收到Contacts数据库中发生更改的广播(通过onChange),您就会查询所有RawContacts.VERSION及其Contacts.LOOKUP_KEY并将其与你之前坚持过的状态,如果其中一个改变了,你就会知道联系人已经改变了。