我知道如何从用户设备检索联系人。 但是我想知道是否有办法查询联系人表并获得 添加了最新的联系人?
我想做的是:
在我的应用程序中,我从设备中读取了联系人并将其保存在我的应用程序的数据库中,因此用户可以选择该应用程序中的最爱联系人。下次用户进入联系活动时,我会从数据库中读取数据。
现在,我想添加一个刷新按钮,所以当用户点击它时,联系人列表将使用新的联系人进行更新..所以不要再读取整个联系人表..我只想了解最新的已添加的联系人或已更改的联系人(在设备中)。
有没有办法实现这一目标?
我看到的唯一与此问题相关的字段是“VERSION
”
和“DATA_VERSION
”
所以我想我需要在我的数据库中保存每个联系人行的VERSION以及何时用户点击刷新我需要比较它以查看是否有任何更改..但在这种情况下我需要再次从设备中读取整个联系人...
答案 0 :(得分:2)
您可以使用ContentObserver
,但是您无法更新哪个联系人,只能通知您的原生联系人已更新。
getContentResolver().registerContentObserver(
ContactsContract.Contacts.CONTENT_URI, false, new AddressBookContentObserver());
/**
* Content observer for Address book contacts change notification.
*
* @author malik
*/
public class AddressBookContentObserver extends ContentObserver {
public AddressBookContentObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
if (DBG) {
ZKLog.d(TAG, "Contacts changes event.");
}
// We are waiting for some time, Native contact taking some time ot update, before that
// if we try to fetch the contact, its not returning the newly added contact
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
// go through all the contact and check which one is missing or modified or added from your database.
}
}, 1000);
}
@Override
public boolean deliverSelfNotifications() {
return true;
}
}
注意:
我们无法获取,修改或删除哪个联系人
答案 1 :(得分:1)
从API级别18开始,您可以使用Contacts.CONTACT_LAST_UPDATED_TIMESTAMP
,这样就可以查询最近修改过(或创建过)的所有联系人,并仅比较上一次联系缓存的联系人id,delta是自上次代码运行以来创建的联系人。