我正在使用本地日历。这是我创建事件的代码:
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);
事件已正确插入,而 RRULE
中的 COUNT
为 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 中看到的那样,如果修改后的 ContentValues
中不存在 DTSTART
,则跳过实例表更新。
关于android - 更新 Android CalendarProvider 中的 ExDate 列后未重新生成实例表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36007135/