在阅读了几篇文章并尝试了几次后,我终于找到了一种方法,可以在Android 8和10上很好地工作。
我的代码:
public void addEventToCalendar() {
Context myContext = getContext();
String[] projection = {"_id", "calendar_displayName"};
Cursor calCursor = myContext.getContentResolver().query(CalendarContract.Calendars.CONTENT_URI, projection, CalendarContract.Calendars.VISIBLE + " = 1 AND " + CalendarContract.Calendars.IS_PRIMARY + "=1", null, CalendarContract.Calendars._ID + " ASC");
if(calCursor.getCount() <= 0){
calCursor = myContext.getContentResolver().query(CalendarContract.Calendars.CONTENT_URI, projection, CalendarContract.Calendars.VISIBLE + " = 1", null, CalendarContract.Calendars._ID + " ASC");
}
while (calCursor.moveToNext()) {
long id = calCursor.getLong(calCursor.getColumnIndexOrThrow(CalendarContract.Calendars._ID));
long startMillis;
long endMillis;
Calendar beginTime = Calendar.getInstance();
beginTime.set(2021, 9, 22, 15, 30);
startMillis = beginTime.getTimeInMillis();
Calendar endTime = Calendar.getInstance();
endTime.set(2021, 9, 22, 16, 45);
endMillis = endTime.getTimeInMillis();
ContentResolver cr = Objects.requireNonNull(getActivity()).getContentResolver();
ContentValues values = new ContentValues();
values.put(CalendarContract.Events.DTSTART, startMillis);
values.put(CalendarContract.Events.DTEND, endMillis);
values.put(CalendarContract.Events.TITLE, "My event");
values.put(CalendarContract.Events.DESCRIPTION, "Nice description");
values.put(CalendarContract.Events.CALENDAR_ID, id);
Log.i("ID","my Id"+ id);
values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());
Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values);
long eventID = Long.parseLong(uri.getLastPathSegment());
}
}
我能够在不同的手机上进行测试,并且插入操作会同时在谷歌日历和基本的安卓日历中完成。
通常这种方法可以确保将事件插入到设备上所有可用的日历中。虽然我无法测试,但我对其有很高的期望。