4
저는 ContentObserver를 사용하여 연락처 데이터베이스의 변경 사항을 수신 대기 중입니다. 지금 나는 onChange() 메소드가 무작위로 호출된다는 것을 알았다. 나는 이것이 자동 접촉 동기화와 어떻게 든 관련이 있다고 생각한다 (비록이 시점에서 접촉에 실제적인 변화가 없다고하더라도).연락처 ContentObserver가 임의로 호출 됨
사용자가 만든 연락처에 실제 변경 사항이있는 경우에만 알림을받을 수 있습니까?
들으 사이먼
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