Android - 只获取已添加的最新联系人
问题描述:
我知道如何从用户设备中检索联系人。 但我不知道是否有办法查询联系人表,并只获得最新的联系人被添加的 ?Android - 只获取已添加的最新联系人
我试图做的是:
在我的应用程序从设备读取联系人,并将它们保存在我的应用程序的数据库,因此用户可以选择在这个应用程序收藏夹接触。当用户下次进入联系活动时,我从数据库中读取数据。
现在,我想添加一个刷新按钮,所以当用户点击它时,联系人列表将更新与新的联系人..所以,而不是再次读取整个联系人表..我想只检索添加的最新联系人或已更改的联系人(在设备中)。
有没有办法实现这个目标?
的域只有我看到,在某种程度上与此相关的问题是“VERSION
” 和“DATA_VERSION
”
所以我想我需要在我的数据库时,也保存的版本为每个联系人行和用户点击刷新我需要比较这个,以查看是否有任何变化..但在这种情况下,我需要再次从设备读取整个联系人...
答
您可以使用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;
}
}
注:
我们不能让这些联系人添加,修改或删除
答
与API级别18开始,你可以使用Contacts.CONTACT_LAST_UPDATED_TIMESTAMP
,所以它可以查询对于最近修改(或创建)的所有联系人,并仅将这些联系人与最后一次联系人ID缓存进行比较,而增量将是自上次代码运行后创建的联系人。
谢谢,所以看来我仍然需要读整个表,对吧? 然后检查我的DB中是否有contacts_id - 所以这将帮助我找到最新的联系人。 – Elior
是的,你需要你的数据库,还有一个想法不仅你应该检查conatct_id你应该检查内部数字因为如果你修改了号码,你的conatct_id –
谢谢你,但没有改变,而不是检查数字..我也可以在我的数据库中保存VERSION字段(每个联系人在联系人表中有这个字段)和修改时间 - 该字段应该更新。 反正谢谢:) – Elior