我试图了解过去几周内同步适配器的整体概念,并且对功能几乎没有任何疑问。
我想听听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
以及“'版本'已经改变认为这是一个联系的变化。这看起来很重要。
最后,我的问题是听取变化的最佳方式是什么 用户设备上的联系人?
答案 0 :(得分:-1)
您可以做的是坚持(可能使用本地MySql
数据库)Contacts.LOOKUP_KEY及其RawContacts.VERSION值之间的映射。
一旦您收到Contacts
数据库中发生更改的广播(通过onChange
),您就会查询所有RawContacts.VERSION
及其Contacts.LOOKUP_KEY
并将其与你之前坚持过的状态,如果其中一个改变了,你就会知道联系人已经改变了。