第一:由于各个手机的系统不一样,所以在对系统日历的账户进行操作的时候,一定要找到拥有最高权限的账户对其进行插入日程,否则有可能造成将日程插入系统日历之后有可能不出现删除按钮。
// 由于各个系统的账户多而且权限不一样,所以对权限进行升序排列查询,以便向最高权限的用户对日程进行CRUD的操作 Cursor userCursor = mContext.getContentResolver().query(Uri.parse(calanderURL), null, null, null, CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL + " ASC "); // 升序排列); if (null != userCursor && userCursor.getCount() > 0) { userCursor.moveToLast(); //注意:开发者可以根据需要改变添加事件的账户 calId = userCursor.getString(userCursor.getColumnIndex("_id")); } else { initCalendars(); calId = userCursor.getString(userCursor.getColumnIndex("_id")); } userCursor.close();第二:对于重复事件和非重复事件,大家都知道 DTEND;和DURATION不能同时设置的。
对于非重复事件:
event.put(CalendarContract.Events.DTEND, schedule.getEndTime().getTime()); event.put(CalendarContract.Events.DURATION, (byte[]) null);对于非重复事件:
event.put(CalendarContract.Events.DURATION, duration); event.put(CalendarContract.Events.DTEND, (byte[]) null);
第三:当将修改之后的日程插入到系统日历的时候,使用update方法的时候,要记得要另外对提醒时间进行update,因为日程的uri和提醒时间的uri是不一样的。而且这是两张不同的表。
对日程的update:
mContext.getContentResolver().update(Uri.parse(calanderEventURL), event, "_id=?", new String[]{scheduleId});对提醒时间的update:
mContext.getContentResolver().update(Uri.parse(calanderRemiderURL), values, CalendarContract.Reminders._ID + "=?", new String[]{scheduleId});