我想以编程方式在Google日历中添加事件,并且我有以下代码在日历中添加事件:
try {
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
String calendarId = getGmailCalendarId(mContext);
values.put(CalendarContract.Events.DTSTART, startMillis);
values.put(CalendarContract.Events.DTEND, endMillis);
values.put(CalendarContract.Events.TITLE, title);
//values.put(CalendarContract.Events.DESCRIPTION, description);
values.put(CalendarContract.Events.EVENT_LOCATION, location);
values.put(CalendarContract.Events.HAS_ALARM, false);
values.put(CalendarContract.Events.CALENDAR_ID, calendarId);
values.put(CalendarContract.Events.EVENT_TIMEZONE, Calendar.getInstance()
.getTimeZone().getID());
System.out.println(Calendar.getInstance().getTimeZone().getID());
// Uri uri;
// if (Integer.parseInt(Build.VERSION.SDK) >= 8)
// uri = cr.insert(Uri.parse("content://com.android.calendar/events"), values);
// else
// uri = cr.insert(Uri.parse("content://calendar/events"), values);
Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values);
long eventId = java.lang.Long.parseLong(((Uri) uri).getLastPathSegment());
Log.d("Event_Id", eventId + "");
syncCalendar(mContext, calendarId);
} catch (Exception e) {
e.printStackTrace();
}
我使用此方法获得了正确的gmail ID,该方法返回了calendarId。
getGmailCalendarId()
public String getGmailCalendarId(Context c) {
String calenderId = "";
String[] projection = new String[]{"_id", "calendar_displayName"};
Uri calendars = Uri.parse("content://com.android.calendar/calendars");
ContentResolver contentResolver = c.getContentResolver();
Cursor managedCursor = contentResolver.query(calendars,
projection, null, null, null);
if (managedCursor != null && managedCursor.moveToFirst()) {
String calName;
String calID;
int nameCol = managedCursor.getColumnIndex(projection[1]);
int idCol = managedCursor.getColumnIndex(projection[0]);
do {
calName = managedCursor.getString(nameCol);
calID = managedCursor.getString(idCol);
if (calName.contains("@gmail")) {
calenderId = calID;
break;
}
} while (managedCursor.moveToNext());
managedCursor.close();
return calenderId;
}
return calenderId;
}
syncCalendar
public static void syncCalendar(Context context, String calendarId) {
try {
ContentResolver cr = context.getContentResolver();
ContentValues values = new ContentValues();
values.put(CalendarContract.Calendars.SYNC_EVENTS, 1);
values.put(CalendarContract.Calendars.VISIBLE, 1);
Uri updateUri = ContentUris.withAppendedId(CalendarContract.Calendars.CONTENT_URI, Long.parseLong(calendarId));
cr.update(updateUri, values, null, null);
} catch (Exception e) {
e.printStackTrace();
}
}
一切都很完美,没有任何错误。它返回事件ID,表示该事件已成功添加。 问题,添加的事件在除 android pie(9)之外的所有设备上的Google日历中可见。在android pie中,它返回我事件ID,但事件未显示在日历应用中。
添加的事件在Google日历中对所有设备可见,除了 android pie(9)
我关注了很多SO问题和答案,但从不了解有关日历的android pie问题。
答案 0 :(得分:0)
我为这个问题奋斗了很多天,但最终我解决了。问题出在我的Android Pie设备中的Google帐户上。
我遵循的步骤是
之后,它可以在我的设备上正常工作。