Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 联系人ContentObserver随机调用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用ContentObserver来监听联系人数据库中的更改.现在我意识到onChange()方法随机调用,即使我没有对联系人做任何更改.我怀疑这与自动联系人同步有关(即使此时联系人没有真正的变化).

只有在用户做出的联系人有真正的变化时才有可能得到通知吗?

thx simon

public class ContactsObserver extends ContentObserver {
private final static String TAG = ContactsObserver.class.getSimpleName();

private Context ctx;
private List<Contactschangelistener> listeners = new ArrayList<Contactschangelistener>();

private ContactsObserver(Context ctx) {
    super(new Handler());
    this.ctx = ctx.getApplicationContext();
    ctx.getContentResolver()
        .registerContentObserver(
                ContactsContract.Contacts.CONTENT_URI,// uri
                false,// notifyForDescendents
                this);                                  // observer
}

@Override
public void onChange(boolean selfChange) {
    Log.i(TAG,"Contacs change");
    for(Contactschangelistener l : listeners){
        l.onContactsChange();
    }
}

@Override
public boolean deliverSelfNotifications() {
    return false; // set to true does not change anything...
}

public static ContactsObserver register(Context ctx){
    Log.d(TAG,"register");
    return new ContactsObserver(ctx);
}

public void unregister(){
    Log.d(TAG,"unregister");
    ctx.getContentResolver().unregisterContentObserver(this);
}

public void addContactschangelistener(Contactschangelistener l){
    listeners.add(l);
}

public interface Contactschangelistener{
    void onContactsChange();
}
}

解决方法

好吧,因为似乎没有人对这个问题有答案,这就是我所做的:

在创建观察者时,我将所有联系人加载到缓存中.然后,在每个onChange()事件中,我再次加载联系人并将它们与缓存的联系人进行比较,以查看是否存在差异.

不是最优雅的解决方案,但它起码至少……

@H_404_29@

大佬总结

以上是大佬教程为你收集整理的android – 联系人ContentObserver随机调用全部内容,希望文章能够帮你解决android – 联系人ContentObserver随机调用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: