gpt4 book ai didi

android - 联系人 ContentObserver 随机调用

转载 作者:太空宇宙 更新时间:2023-11-03 10:54:03 25 4
gpt4 key购买 nike

我正在使用 ContentObserver 来监听联系人数据库中的更改。现在我意识到 onChange() 方法被随机调用,即使我没有对联系人进行任何更改。我怀疑这在某种程度上与自动联系人同步有关(即使此时联系人没有真正的变化)。

是否有可能仅在用户对联系人进行实际更改时才收到通知?

谢谢西蒙

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() 事件中,我再次加载联系人并将它们与缓存的进行比较,看看是否存在差异。

不是最优雅的解决方案,但它至少可以工作......

关于android - 联系人 ContentObserver 随机调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8452252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com