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; 
     } 
    } 

注:

我们不能让这些联系人添加,修改或删除

+0

谢谢,所以看来我仍然需要读整个表,对吧? 然后检查我的DB中是否有contacts_id - 所以这将帮助我找到最新的联系人。 – Elior

+0

是的,你需要你的数据库,还有一个想法不仅你应该检查conatct_id你应该检查内部数字因为如果你修改了号码,你的conatct_id –

+0

谢谢你,但没有改变,而不是检查数字..我也可以在我的数据库中保存VERSION字段(每个联系人在联系人表中有这个字段)和修改时间 - 该字段应该更新。 反正谢谢:) – Elior

与API级别18开始,你可以使用Contacts.CONTACT_LAST_UPDATED_TIMESTAMP,所以它可以查询对于最近修改(或创建)的所有联系人,并仅将这些联系人与最后一次联系人ID缓存进行比较,而增量将是自上次代码运行后创建的联系人。