Android - 仅获取已添加的最新联系人

时间:2017-08-13 08:45:27

标签: android android-contacts

我知道如何从用户设备检索联系人。 但是我想知道是否有办法查询联系人表并获得 添加了最新的联系人?

我想做的是:

在我的应用程序中,我从设备中读取了联系人并将其保存在我的应用程序的数据库中,因此用户可以选择该应用程序中的最爱联系人。下次用户进入联系活动时,我会从数据库中读取数据。

现在,我想添加一个刷新按钮,所以当用户点击它时,联系人列表将使用新的联系人进行更新..所以不要再读取整个联系人表..我只想了解最新的已添加的联系人或已更改的联系人(在设备中)。

有没有办法实现这一目标?

我看到的唯一与此问题相关的字段是“VERSION” 和“DATA_VERSION

所以我想我需要在我的数据库中保存每个联系人行的VERSION以及何时用户点击刷新我需要比较它以查看是否有任何更改..但在这种情况下我需要再次从设备中读取整个联系人...

2 个答案:

答案 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是自上次代码运行以来创建的联系人。