我正在使用具有READ_CALENDAR权限的Google Calendar API从日历中查询某些足球比赛,并将其与我的裁判应用程序的结果集成在一起。目前我在onConnected上查询日历,如果我在用户的日历中添加新游戏,这通常不够。
显然,每当我显示数据时,我都可以重新查询日历API,但我希望听到来自Calendar API的推送通知,说明已添加新事件。这里的API:https://developer.android.com/guide/topics/providers/calendar-provider.html没有提及任何内容。
但是,这里:https://developers.google.com/google-apps/calendar/v3/push讨论了向您自己的服务器发送推送通知。有人知道从应用程序中做同等操作的方法吗?
答案更新。这段代码看起来是否合理,特别是在泄漏资源方面?
private void updateGamesFromCalendar() {
//get Calendar games if allowed
if (checkCalendar()) {
//Look for events with the keyword list in the Title, and dates between today-7 and today+7
long nowMs = System.currentTimeMillis();
String[] eventSelectionArgs = new String[]{Long.toString(nowMs - TimeUnit.DAYS.toMillis(7)),Long.toString(nowMs + TimeUnit.DAYS.toMillis(7)) };
if ((mEventsCursor != null) && (mCalendarObserver != null)) mEventsCursor.unregisterContentObserver(mCalendarObserver);
mEventsCursor = getContentResolver().query(RefWatchSettings.uriEvents, RefWatchSettings.EVENT_PROJECTION, RefWatchSettings.whereClauseEvents, eventSelectionArgs, RefWatchSettings.orderByEvents);
if (mCalendarObserver == null) mCalendarObserver = new CalendarEventObserver(null);
mEventsCursor.registerContentObserver(mCalendarObserver);
//delete future Calendar games and replace with the new query
Game.removeFutureCalendarGames(mGames);
removeFutureCalendarGamesFromDataItem();
getGamesFromCalendar();
refreshGameFragments();
sendFutureGameNotifications();
}
}
答案 0 :(得分:1)
通过查询检索日历事件(请参阅Google Doc)。查询返回Cursor
个对象(请参阅Cursor JavaDoc)。使用Cursor
可以观察到registerContentObserver()
个对象。
因此,请对日历事件进行查询,注册内容观察器并让您的Cursor打开。您应该通过内容观察器接收事件更新。