Android 通过events.dtend更新calendar instances.end
更新CalendarContract.Events DTEND列时,为什么更改没有显示在CalendarContract.Instances结束列中 我的应用程序允许用户使用CalendarContract.events API查看和更改日历事件。代码对Events表执行更新,然后(稍后)使用Instances表将其读回。例如,对标题的更改可以正常工作(也就是说,我更新事件并可以在实例中读回更改)。对Events.DTEND的更改确实会显示在Instances.DTEND中,但如何使该更新也显示在Instances.END中 这一点很重要,因为Android日历应用程序(以及我的应用程序)显然使用Instances.BEGIN和Instances.END来确定日历中显示的内容 这是我的更新代码:Android 通过events.dtend更新calendar instances.end,android,events,calendar,updates,instances,Android,Events,Calendar,Updates,Instances,更新CalendarContract.Events DTEND列时,为什么更改没有显示在CalendarContract.Instances结束列中 我的应用程序允许用户使用CalendarContract.events API查看和更改日历事件。代码对Events表执行更新,然后(稍后)使用Instances表将其读回。例如,对标题的更改可以正常工作(也就是说,我更新事件并可以在实例中读回更改)。对Events.DTEND的更改确实会显示在Instances.DTEND中,但如何使该更新也显示
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put (Events.CALENDAR_ID, calendarId);
values.put (Events.TITLE, title);
values.put (Events.DTEND, eventEnd.getTimeInMillis());
String where = "_id =" + eventId +
" and " + CALENDAR_ID + "=" + calendarId;
int count = cr.update (Events.CONTENT_URI, values, where, null);
if (count != 1)
throw new IllegalStateException ("more than one row updated");
谢谢。解决方案是添加开始日期:
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put (Events.CALENDAR_ID, calendarId);
values.put (Events.TITLE, title);
values.put (Events.DTSTART, eventStart.getTimeInMillis());
values.put (Events.DTEND, eventEnd.getTimeInMillis());
String where = "_id =" + eventId +
" and " + CALENDAR_ID + "=" + calendarId;
int count = cr.update (Events.CONTENT_URI, values, where, null);
if (count != 1)
throw new IllegalStateException ("more than one row updated");
警告:本例仅显示如何更新非重复事件。非重复事件的RRULE为空
我怀疑提供者代码所做的只是使用您提供的值,而不是重新蚀刻开始日期本身(显然,如果用户更改开始日期,您无论如何都必须提供它)。从减少数据库访问的角度来看,这是有意义的。可惜谷歌没有记录这些