как прослушивать изменения в базе данных контактов
Я пытаюсь прослушать любые изменения в базе данных контактов.
поэтому я создаю свой contentObserver, который является дочерним классом ContentObserver
:
private class MyContentObserver extends ContentObserver {
public MyContentObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
System.out.println (" Calling onChange" );
}
}
MyContentObserver contentObserver = new MyContentObserver();
context.getContentResolver().registerContentObserver (People.CONTENT_URI, true, contentObserver);
но когда я использовать 'EditContactActivity
' чтобы изменить базу данных контактов, мой onChange()
не вызывали.
2 ответа:
я развернул ваш пример как есть, и он отлично работает.
package com.test.contentobserver; import android.app.Activity; import android.database.ContentObserver; import android.os.Bundle; import android.provider.Contacts.People; public class TestContentObserver extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.getApplicationContext().getContentResolver().registerContentObserver (People.CONTENT_URI, true, contentObserver); } private class MyContentObserver extends ContentObserver { public MyContentObserver() { super(null); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); } } MyContentObserver contentObserver = new MyContentObserver(); }
Итак, вы, должно быть, делаете что-то еще не так.
вы вносите изменения через курсор, с которым зарегистрирован наблюдатель?
проверьте это с помощью функции Observer deliverSelfNotifications (). (он возвращает false по умолчанию)
вы можете переопределить эту функцию наблюдателя с чем-то вроде:
@Override public boolean deliverSelfNotifications() { return true; }
убедитесь, что люди.CONTENT_URI-это ссылаясь на правильное значение (андроид.поставщик.Контакты.Люди.)
кроме того, я бы предложил вам использовать обработчик с ContentObserver, хотя это не то, что делает ваш код неправильным в этом случае.