更新Android CalendarProvider

时间:2016-03-15 09:24:43

标签: android android-contentprovider icalendar android-calendar

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

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个事件而不是1个,似乎ExDate无效。

我知道可以使用original_idoriginal_instance_time以及CONTENT_EXCEPTION_URI插入例外。我想知道有没有其他方法可以做到这一点,而不是插入另一个事件?

由于

1 个答案:

答案 0 :(得分:1)

尝试在更新活动时向CalendarContract.Events.DTSTART添加ContentValues(确保传递原始值)。

正如您在CalendarInstancesHelper.java中所看到的,如果修改后的DTSTART中不存在ContentValues,则会跳过实例表更新。