我正在创建一个允许用户通过Android应用程序插入事件的应用程序。我的应用程序使用谷歌日历API for Android,我目前很困惑,我的应用程序只允许我自己的帐户将事件插入谷歌日历。任何人都可以帮我解决我的问题。如果您想知道
,这就是代码private class MakeNotificationTask extends AsyncTask<Void, Void, Boolean>{
private com.google.api.services.calendar.Calendar mService = null;
private Exception mLastError = null;
public MakeNotificationTask(GoogleAccountCredential credential) {
HttpTransport transport = AndroidHttp.newCompatibleTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
mService = new com.google.api.services.calendar.Calendar.Builder(
transport, jsonFactory, credential)
.setApplicationName("Google Calendar API Android Quickstart")
.build();
}
public void MakeNotification(String name, String date){
Event event = new Event()
.setSummary(name + "'s vehicle registration license expires")
.setDescription("Please renew your vehicle registration license!!!");
String newId = generateTimeStamp();
event.setId(newId);
VehiclesDatabase dbase = new VehiclesDatabase(getApplicationContext());
dbase.insertSTNK(newId, name);
DateTime startDateTime = new DateTime(date+"T09:00:00+07:00");
EventDateTime start = new EventDateTime()
.setDateTime(startDateTime);
event.setStart(start);
DateTime endDateTime = new DateTime(date+"T23:59:59+07:00");
EventDateTime end = new EventDateTime()
.setDateTime(endDateTime);
event.setEnd(end);
EventReminder[] reminderOverrides = new EventReminder[] {
new EventReminder().setMethod("popup").setMinutes(14 * 24 * 60),
new EventReminder().setMethod("popup").setMinutes(28 * 24 * 60),
};
Event.Reminders reminders = new Event.Reminders()
.setUseDefault(false)
.setOverrides(Arrays.asList(reminderOverrides));
event.setReminders(reminders);
String calendarId = "primary";
try {
mService.events().insert(calendarId, event).execute();
Log.e("event making", "success");
} catch (IOException e) {
Log.e("event making", "goes horribly wrong "+e.getMessage());
e.printStackTrace();
}
}
@Override
protected Boolean doInBackground(Void... params) {
try {
MakeNotification(vehicleName, stnkDate);
Log.e("event insertion success", "Success in making event");
return true;
} catch (Exception e) {
mLastError = e;
Log.e("event insertion error", "Failed in making event " + e.getMessage());
return false;
}
}
@Override
protected void onCancelled() {
if (mLastError != null) {
if (mLastError instanceof GooglePlayServicesAvailabilityIOException) {
showGooglePlayServicesAvailabilityErrorDialog(
((GooglePlayServicesAvailabilityIOException) mLastError)
.getConnectionStatusCode());
} else if (mLastError instanceof UserRecoverableAuthIOException) {
startActivityForResult(
((UserRecoverableAuthIOException) mLastError).getIntent(),
AddVehicles.REQUEST_AUTHORIZATION);
} else {
Log.e("error when cancelled", mLastError.getMessage());
}
} else {
Log.e("cancelled", "request cancelled");
}
}
}
答案 0 :(得分:0)
尝试添加以下代码(除了IOException之外);它会弹出一个单独的提示,用户会向您提供您的App权限以修改用户的日历:
catch (UserRecoverableAuthIOException e) {
context.startActivity(e.getIntent());
}
请注意,这将在某种程度上触发用户的Google帐户的安全警报。不过,我没有看到任何负面影响,也不需要他们进一步确认。根据帐户设置的不同,可能有一种方法可以拥有一个Google帐户,该帐户只是不允许此权限,并且可能永远不会触发该异常;最好只是在那个时候失败。