Android:在WhatsApp上聊天时调用Content Observer Onchange方法



>我在应用程序中使用联系人观察器来观察联系人的变化,并且在使用 whatsapp 时不断调用 onchange 方法,有没有办法避免这些额外的调用?我已经覆盖了交付自我通知())

调用

onChange方法是因为联系人数据实际上已更改,这是预期行为。

在Whatsapp(以及许多其他应用程序)上发送消息时,联系人的TIMES_CONTACTEDLAST_TIME_CONTACTED值会更新,从而触发对所有观察者的更改通知。

ContentObserver 不支持指定将触发的更改类型,而某些更改不会触发,因此会针对所有类型的更改调用你的应用。

您需要保留一些本地副本(最好是简单的哈希值),该副本仅表示联系人数据中感兴趣的字段,然后,当您调用onChange方法时,查询最近修改过的联系人(为此使用 CONTACT_LAST_UPDATED_TIMESTAMP)并将以前的哈希值与新的哈希值进行比较,如果不同,您知道联系人已更改。

下面是可以使用的示例查询:

private void fetchRecentContacts(long lastTimeChecked) {
    String[] projection = new String[] { Contacts._ID, Contacts.DISPLAY_NAME, Contacts.CONTACT_LAST_UPDATED_TIMESTAMP }; // add more relevant fields here
    String selection = Contacts.CONTACT_LAST_UPDATED_TIMESTAMP + " > " + lastTimeChecked;
    Cursor cur = getContentResolver().query(Contacts.CONTENT_URI, projection, selection, null, null);
    DatabaseUtils.dumpCursor(cur);
    // iterate cursor and check for changes
    cur.close();
}

相关内容

最新更新