У меня есть обозреватель контента, который должен получать уведомления при изменении одного из контактов, добавленных моим адаптером синхронизации.Я регистрирую и отменяю регистрацию наблюдателя, выполняя это:
private static final Uri MYAPP_CONTENT_URI = ContactsContract.RawContacts.CONTENT_URI.buildUpon().appendQueryParameter(RawContacts.ACCOUNT_NAME, SyncAdapter.MYAPP_ACCOUNT_NAME).appendQueryParameter(RawContacts.ACCOUNT_TYPE, MY_APP_ACCOUNT_TYPE).build();
public static void registerContentObserver() {
ContentResolver resolver = MyApplication.getAppContext().getContentResolver();
cursorContacts = resolver.query(MYAPP_CONTENT_URI, null, RawContacts.DELETED + "=0", null, null);
cursorContacts.registerContentObserver(MYAPP_URI_OBSERVER);
}
public static void unregisterContentObserver() {
if (cursorContacts != null) {
cursorContacts.unregisterContentObserver(MYAPP_URI_OBSERVER);
cursorContacts.close();
}
}
Проблема в том, что даже когда курсор пуст (getCount возвращает 0) после регистрации наблюдателя, я получаю вызов onChange, что бы я ни делал вродная адресная книга.Не следует ли вызывать наблюдателя, только когда одна из записей в курсоре была изменена?В документации говорится:
Зарегистрировать наблюдателя, который вызывается при изменении содержимого, поддерживающего этот курсор
Что такое содержимое, поддерживающее этот курсор?Я думал, что это был список lookupuri контактов в курсоре, но похоже, что этого достаточно для изменения в ContactsContract.RawContacts.CONTENT_URI.
Я также пытался зарегистрировать одного наблюдателя для каждого Uri,Это не помогает.Хотя документация для ContentResolver.registerContentObserver гласит:
Зарегистрируйте класс наблюдателя, который получает обратные вызовы при изменении данных, идентифицированных данным URI содержимого.
Parameters
uri The URI to watch for changes. This can be a specific row URI, or a base URI for a whole class of content.
notifyForDescendents If true changes to URIs beginning with uri will also cause notifications to be sent. If false only changes to the exact URI specified by uri will cause notifications to be sent. If true, than any URI values at or below the specified URI will also trigger a match.
(я установилnotifyForDescendents в false, но это не должно было вызывать наблюдателей в любом случае).
Что не так?Спасибо, вы