Android 插入日程到系统日历要注意的3点

第一:由于各个手机的系统不一样,所以在对系统日历的账户进行操作的时候,一定要找到拥有最高权限的账户对其进行插入日程,否则有可能造成将日程插入系统日历之后有可能不出现删除按钮。

// 由于各个系统的账户多而且权限不一样,所以对权限进行升序排列查询,以便向最高权限的用户对日程进行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});

你可能感兴趣的:(Android 插入日程到系统日历要注意的3点)