在使用registerContentObserver或其他方法时,只是尝试确定是否有一种简单的方法来确定哪些联系人发生了变化?我可以告诉数据库何时更改,但不确定每次更新/更改发生时我都要检查所有记录。
基本上,如果我有一个联系人列表,一个通过手动方式更新(即我更改联系人的电话号码或添加新联系人),或自动(说ActiveSync照片被添加,更改)。我希望能够A)知道某些事情发生了变化,并且B)知道哪些联系人的某些数据发生了变化。
我正在尝试寻找某些用户,以便我可以在远程服务中匹配他们的照片。如果有更多信息添加到用户帐户,我希望能够检查它以查看它是否提供匹配。我不想安排它,我想在更新发生后这样做。
克里斯。
答案 0 :(得分:7)
我不确定您目前正在注册哪个Uri更新,但是当您注册ContentObserver
时,您是否只能注册一个直接指向您感兴趣的联系人的个人Uri?然后,您的观察者只会在您修改有趣的联系人时收到通知。 SDK文档标题“查找URI”中的部分详细介绍了这一点:
http://developer.android.com/resources/articles/contacts.html
查找键对于每个记录(行)都是唯一的,所以我想像你这样做的东西是什么?
Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey);
getContentResolver().registerContentObserver(lookupUri, false, myObserver);
为列表中的每个联系人执行此操作。
添加联系人
我可以看到这样做的最好方法是每次ContentObserver
更改时重新查询光标到Contacts表(重新查询速度很快,即使你经常使用很多数据),并保持最高的已知CONTACT_ID值。每当光标包含超出您存储的ID时,就会添加它。
此外,如果您还没有看过this conversation,那可能是一个很好的阅读。 Dianne似乎非常相信他们会将内容更改的细节保留在ContentObserver
干杯。
答案 1 :(得分:1)
由于回答了这个问题,ContentObserver类中有一个新的回调方法,其中包含已更改内容的uri:http://developer.android.com/reference/android/database/ContentObserver.html#onChange(boolean,android.net.Uri)
从Android API Level 16开始提供此功能