这个问题可能是由于某些设备上的权限限制或者其他原因导致的。你可以尝试以下解决方法:
private long createCalendarEvent() {
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(CalendarContract.Calendars.CONTENT_URI,
new String[]{CalendarContract.Calendars._ID},
CalendarContract.Calendars.ACCOUNT_NAME + " = ? AND " + CalendarContract.Calendars.ACCOUNT_TYPE + " = ?",
new String[]{"your_account_name", "your_account_type"},
null);
long calendarId;
if (cursor != null && cursor.moveToFirst()) {
calendarId = cursor.getLong(0);
cursor.close();
} else {
ContentValues values = new ContentValues();
values.put(CalendarContract.Calendars.ACCOUNT_NAME, "your_account_name");
values.put(CalendarContract.Calendars.ACCOUNT_TYPE, "your_account_type");
values.put(CalendarContract.Calendars.NAME, "your_calendar_name");
values.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, "your_calendar_display_name");
values.put(CalendarContract.Calendars.CALENDAR_COLOR, Color.BLUE);
values.put(CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL, CalendarContract.Calendars.CAL_ACCESS_OWNER);
values.put(CalendarContract.Calendars.OWNER_ACCOUNT, "your_owner_account");
Uri uri = cr.insert(CalendarContract.Calendars.CONTENT_URI, values);
calendarId = Long.parseLong(uri.getLastPathSegment());
}
// 创建日历事件
long startTime = System.currentTimeMillis();
long endTime = startTime + 3600000; // 1小时后
ContentValues eventValues = new ContentValues();
eventValues.put(CalendarContract.Events.CALENDAR_ID, calendarId);
eventValues.put(CalendarContract.Events.TITLE, "Event Title");
eventValues.put(CalendarContract.Events.EVENT_LOCATION, "Event Location");
eventValues.put(CalendarContract.Events.DTSTART, startTime);
eventValues.put(CalendarContract.Events.DTEND, endTime);
Uri eventUri = cr.insert(CalendarContract.Events.CONTENT_URI, eventValues);
long eventId = Long.parseLong(eventUri.getLastPathSegment());
return eventId;
}
请注意,你需要将上述代码中的“your_account_name”、“your_account_type”、“your_calendar_name”、“your_calendar_display_name”和“your_owner_account”替换为适合你的实际情况的值。
希望这些解决方法能够帮助你解决问题!