4
我正在使用ContentObserver來偵聽聯繫人數據庫中的更改。現在我意識到onChange()方法會隨機調用,即使我沒有對聯繫人進行任何更改。我懷疑這與自動聯繫同步有關(儘管此時聯繫人沒有真正的變化)。聯繫人ContentObserver隨機調用
只有在用戶所做的聯繫人發生實質性變化時纔有可能收到通知?
THX西蒙
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();
}
}
西蒙說得對;在himanshu的評論中,更優雅(也可能是脆弱的)方法在http://mylifewithandroid.blogspot.com/2008/03/observing-content.html – kellogs