2016-04-22 80 views
1

我正在开发使用Google日历API的日历应用程序。我可以查询在Google日历中添加的事件列表,但在创建Google日历活动时出现错误。以下是错误Android日历api 403禁止权限不足错误

com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden 
{ 
"code" : 403, 
    "errors" : [ { 
    "domain" : "global", 
    "message" : "Insufficient Permission", 
    "reason" : "insufficientPermissions" 
    } ], 
    "message" : "Insufficient Permission" 
} 

这里是我的代码:

private void addEvent(String desc, String eventtime, Date date) { 
    Event event = new Event() 
      .setSummary(desc) 
      .setDescription(desc); 

    java.util.Calendar cal = java.util.Calendar.getInstance(); 
    TimeZone tz = cal.getTimeZone(); 
    DateTime startDateTime = new DateTime(new SimpleDateFormat("yyyy-MM-dd").format(date)+"T09:00:00-07:00"); 
    EventDateTime start = new EventDateTime() 
      .setDateTime(startDateTime) 
      .setTimeZone(String.valueOf(tz)); 
    event.setStart(start); 

    DateTime endDateTime = new DateTime(new SimpleDateFormat("yyyy-MM-dd").format(date)+"T17:00:00-07:00"); 
    EventDateTime end = new EventDateTime() 
      .setDateTime(endDateTime) 
      .setTimeZone(String.valueOf(tz)); 
    event.setEnd(end); 

    String[] recurrence = new String[] {"RRULE:FREQ=DAILY;COUNT=2"}; 
    event.setRecurrence(Arrays.asList(recurrence)); 

    EventAttendee[] attendees = new EventAttendee[] { 
      new EventAttendee().setEmail("[email protected]"), 
      new EventAttendee().setEmail("[email protected]"), 
    }; 
    event.setAttendees(Arrays.asList(attendees)); 

    EventReminder[] reminderOverrides = new EventReminder[] { 
      new EventReminder().setMethod("email").setMinutes(24 * 60), 
      new EventReminder().setMethod("popup").setMinutes(10), 
    }; 
    Event.Reminders reminders = new Event.Reminders() 
      .setUseDefault(false) 
      .setOverrides(Arrays.asList(reminderOverrides)); 
    event.setReminders(reminders); 

    new AddEventTask(event).execute(); 

} 

AsyncClass

private class AddEventTask extends AsyncTask<Void, Void, Event>{ 

    private com.google.api.services.calendar.Calendar mService = null; 
    private Exception mLastError = null; 
    private Event event; 

    public AddEventTask(Event event) { 
     HttpTransport transport = AndroidHttp.newCompatibleTransport(); 
     JsonFactory jsonFactory = JacksonFactory.getDefaultInstance(); 
     mService = new com.google.api.services.calendar.Calendar.Builder(
       transport, jsonFactory, mCredential) 
       .setApplicationName("Google Calendar API Android Quickstart") 
       .build(); 
     this.event = event; 
    } 

    @Override 
    protected Event doInBackground(Void... voids) { 
     try { 
      return addSingleEvent(); 
     } catch (Exception e) { 
      mLastError = e; 
      cancel(true); 
      return null; 
     } 
    } 

    private Event addSingleEvent() { 

     String calendarId = "primary"; 
     try { 
      event = mService.events().insert(calendarId, event).execute(); 
      System.out.printf("Event created: %s\n", event.getHtmlLink()); 
      return event; 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return null; 
     } 

    } 

    @Override 
    protected void onPreExecute() { 
     mOutputText.setText(""); 
     mProgress.show(); 
    } 

    @Override 
    protected void onPostExecute(Event s) { 
     super.onPostExecute(s); 
     mProgress.hide(); 
     if (s == null) { 
      mOutputText.setText("No results returned."); 
     } else { 
      System.out.printf("Event created: %s\n", event.getHtmlLink()); 
      mOutputText.setText(s.getHtmlLink()); 
     } 
    } 

    @Override 
    protected void onCancelled() { 
     mProgress.hide(); 
     if (mLastError != null) { 
      if (mLastError instanceof GooglePlayServicesAvailabilityIOException) { 
       showGooglePlayServicesAvailabilityErrorDialog(
         ((GooglePlayServicesAvailabilityIOException) mLastError) 
           .getConnectionStatusCode()); 
      } else if (mLastError instanceof UserRecoverableAuthIOException) { 
       startActivityForResult(
         ((UserRecoverableAuthIOException) mLastError).getIntent(), 
         CalendarActivity.REQUEST_AUTHORIZATION); 
      } else { 
       mOutputText.setText("The following error occurred:\n" 
         + mLastError.getMessage()); 
      } 
     } else { 
      mOutputText.setText("Request cancelled."); 
     } 
    } 

} 

需要帮助来解决这个问题。提前致谢。

+0

你已经解决了吗? –

回答

2

这是因为SCOPES中权限不足。

添加以下代码赋予权限:

private static final String[] SCOPES = { CalendarScopes.CALENDAR_READONLY ,CalendarScopes.CALENDAR};