Opus1217
Opus1217

Reputation: 743

Is there a way to set up a push notification from Google Calendar to my android app?

I am using the Google Calendar API with the READ_CALENDAR permission to query certain soccer games from a calendar and display them integrated with results from my referee app. Currently I query the calendar onConnected which is not often enough if I add a new game in the user's calendar.

Obviously I can requery the calendar API whenever I display data, but I was hoping to listen for a push notification from the Calendar API saying that a new event had been added. The API here: https://developer.android.com/guide/topics/providers/calendar-provider.html doesn't mention anything.

However, here: https://developers.google.com/google-apps/calendar/v3/push talks about push notifications to your own server. Does anybody know a way to do the equivalent from an app?

UPDATE from answer. Does this code look reasonable, especially with respect to leaking resources?

    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();
    }
}

Upvotes: 0

Views: 754

Answers (1)

DenisGL
DenisGL

Reputation: 1200

Calendar events are retrieved with queries (see Google Doc). Queries return Cursor objects (see Cursor JavaDoc). And Cursor objects can be observed with registerContentObserver(). So make a query on calendar events, register a Content Observer and let your Cursor open. You should receive updates of events through your Content Observer.

Upvotes: 1

Related Questions