更新 android CalendarProvider 中的 ExDate 列后未重新生成实例 table

Instance table not regenerated after updating ExDate column in android CalendarProvider

我正在使用本地日历。这是我创建事件的代码:

ContentValues values = new ContentValues();
values.put(CalendarContract.Events.DTSTART, 1457926200000L);
values.put(CalendarContract.Events.DURATION, "P3600S");
values.put(CalendarContract.Events.RRULE, "FREQ=DAILY;COUNT=2;WKST=SU");
values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());
values.put(CalendarContract.Events.CALENDAR_ID, 34);
values.put(CalendarContract.Events.EXDATE, "20160314T033000Z");
values.put(CalendarContract.Events.TITLE, "R0");

Uri uri = getContentResolver().insert(CalendarContract.Events.CONTENT_URI, values);

事件插入正确,而 COUNTRRULE 中是 2,因为 ExDate,我只看到一个事件。但是如果我删除这一行:

values.put(CalendarContract.Events.EXDATE, "20160314T033000Z");

并更新插入的事件:

ContentValues values = new ContentValues();
values.put(CalendarContract.Events.EXDATE, "20160314T033000Z");
int update = getContentResolver().update(ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, 3612), values, null, null);

事件更新成功(我查询了一下,ExDate更新正确)。但是我看到了 2 个事件而不是一个,而且 ExDate 似乎不起作用。

我知道可以使用 original_idoriginal_instance_time 以及 CONTENT_EXCEPTION_URI 插入异常。我想知道除了插入另一个事件还有其他方法吗?

谢谢

尝试在更新事件时将 CalendarContract.Events.DTSTART 添加到 ContentValues(确保传递原始值)。

如您在 CalendarInstancesHelper.java 中所见,如果 DTSTART 不存在于修改后的 ContentValues 中,则跳过实例 table 更新。