Я читал здесь много квестов об этой проблеме, но ни один из них не объясняет мне это правильно.
Мне нужно прослушать календарь на предмет обновлений, как только что-то изменилось, я просто получу события. Выборка событий работает правильно.
Проблема в том, что я получаю onChange () много раз вместо 1 (во всяком случае, я ожидаю этого). Сначала я думал, что я не отписался, но я делаю это.
Мой наблюдатель:
private ContentObserver mContentObserver = new ContentObserver(null) {
@Override
public void onChange(boolean selfChange) {
Logger.d(TAG, "onCalendarUpdateReceived");
}
};
Я звоню, чтобы подписаться:
public void subscribeFromCalendarUpdates() {
ContentResolver contentResolver = mApplicationContext.getContentResolver();
contentResolver.registerContentObserver(buildTodayEventsUri(), false, mContentObserver);
}
Я использую этот URI для запроса сегодняшних собраний:
private Uri buildTodayEventsUri() {
Logger.d(TAG, "buildTodayEventsUri");
calculateTodayTimeLimits();
Uri.Builder eventsUriBuilder = CalendarContract.Instances.CONTENT_URI.buildUpon();
ContentUris.appendId(eventsUriBuilder, Long.valueOf(mStartDayTime));
ContentUris.appendId(eventsUriBuilder, Long.valueOf(mEndDayTime));
return eventsUriBuilder.build();
}
Вот как я отписываюсь:
public void unsubscribeFromCalendarUpdates() {
Logger.d(TAG, "unsubscribeFromCalendarUpdates");
if (mContentObserver != null) {
ContentResolver contentResolver = mApplicationContext.getContentResolver();
contentResolver.unregisterContentObserver(mContentObserver);
}
}
Из-за логов подписка и отмена подписки симметричны.
Может кто-нибудь объяснить мне, почему это происходит, и как я могу это решить?