12

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

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

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

克里斯。

4

2 回答 2

9

我不确定您当前正在注册哪个 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更改时重新查询联系人表的游标(重新查询很快,即使您经常使用大量数据进行查询),并保持最高已知的 CONTACT_ID 值。每当光标包含超出您存储的 ID 时,它就被添加了。

另外,如果您还没有看过这段对话,那可能是一本好书。Dianne 似乎很坚持他们不让内容更改的细节ContentObserver

干杯。

于 2011-02-18T18:29:50.103 回答
1

由于这个问题得到了回答,在 ContentObserver 类中有一个新的回调方法可用,该方法具有更改内容的 uri:http://developer.android.com/reference/android/database/ContentObserver.html#onChange(boolean , android.net.Uri)

这从 Android API 级别 16 开始可用

于 2012-07-24T14:15:37.317 回答