你能用registerContentObserver确定联系人的变化吗?

Chr*_*pix 12 android contacts contentobserver

只是尝试确定在使用registerContentObserver或其他方法时是否有一种简单的方法来确定哪些联系人发生了变化?我可以告诉数据库何时更改,但不确定每次更新/更改发生时我都要检查所有记录.

基本上,如果我有一个联系人列表,一个通过手动方法更新(即我更改联系人的电话号码或添加新的联系人),或自动(说ActiveSync照片添加,更改).我希望能够A)知道某些事情发生了变化,并且B)知道哪些联系人的某些数据发生了变化.

我正在尝试寻找某些用户,我可以从远程服务中匹配他们的照片.如果有更多信息添加到用户帐户,我希望能够检查它以查看它是否提供匹配.我不想安排它,我想在更新发生后这样做.

克里斯.

Dev*_*red 8

我不确定您目前正在注册哪个Uri更新,但是当您注册时,您ContentObserver是否只能注册一个直接指向您感兴趣的联系人的个人Uri?然后,您的观察者只会在您修改有趣的联系人时收到通知.SDK文档标题"Lookup URI"中的部分更多地讨论了这个:

http://developer.android.com/resources/articles/contacts.html

查找键对于每个记录(行)都是唯一的,所以我想你做的就是这样的事情吗?

Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey);
getContentResolver().registerContentObserver(lookupUri, false, myObserver);
Run Code Online (Sandbox Code Playgroud)

并为列表中的每个联系人执行此操作.

添加联系人

我可以看到这样做的最好方法是每次ContentObserver更改时重新查询游标到Contacts表(重新查询很快,即使你经常使用大量数据),并保持最高已知CONTACT_ID值.每当光标包含超出您存储的ID时,它就会被添加.

此外,如果你还没有看过这个对话,那可能是一个很好的阅读.Dianne似乎非常相信他们会保留内容更改的细节ContentObserver

干杯.

  • 所以这不是一个想法,但它只有在我知道添加了什么联系人时才有效,也不确定3000个内容观察者的开销.在我的情况下,我希望更新通过交换活动同步添加的新联系人,并更新w /照片(查找和下载),如果他们没有添加w/one. (2认同)