我在这里读过很多关于这个问题的问题,但是他们都没有为我正确解释。
我需要收听日历以进行更新,一旦更改,我将仅获取事件。事件的获取正常进行。 问题是我多次收到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);
}
}
由于日志,订阅和退订是对称的。
有人可以向我解释为什么会发生稀疏现象,我该如何解决呢?