更新 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);
事件插入正确,而 COUNT
在 RRULE
中是 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_id
和 original_instance_time
以及 CONTENT_EXCEPTION_URI
插入异常。我想知道除了插入另一个事件还有其他方法吗?
谢谢
尝试在更新事件时将 CalendarContract.Events.DTSTART
添加到 ContentValues
(确保传递原始值)。
如您在 CalendarInstancesHelper.java 中所见,如果 DTSTART
不存在于修改后的 ContentValues
中,则跳过实例 table 更新。
我正在使用本地日历。这是我创建事件的代码:
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);
事件插入正确,而 COUNT
在 RRULE
中是 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_id
和 original_instance_time
以及 CONTENT_EXCEPTION_URI
插入异常。我想知道除了插入另一个事件还有其他方法吗?
谢谢
尝试在更新事件时将 CalendarContract.Events.DTSTART
添加到 ContentValues
(确保传递原始值)。
如您在 CalendarInstancesHelper.java 中所见,如果 DTSTART
不存在于修改后的 ContentValues
中,则跳过实例 table 更新。