android - 更新 Android CalendarProvider 中的 ExDate 列后未重新生成实例表

标签 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);

事件已正确插入,而 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_idoriginal_instance_time 以及 CONTENT_EXCEPTION_URI 插入异常。我想知道除了插入另一个事件之外,还有其他方法可以做到这一点吗?

谢谢

最佳答案

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

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

关于android - 更新 Android CalendarProvider 中的 ExDate 列后未重新生成实例表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36007135/

相关文章:

android - Content Provider的onCreate

php - 使用 codeigniter 电子邮件库在电子邮件上发送 ical 邀请

flutter - 如何在 Dart 中解析 ICalendar 格式?

java - Android:从应用程序外部控制 MediaPlayer 实例(对象)?

android - S 浏览器书签 URI

android - 从内容提供者检索数据并将其显示在其他 Activity 上

php - 如何获得 vcalendar session 邀请请求的响应

android - 创建可用于应用程序中所有 Activity 的选项菜单

java - JNI : Bitmap from unsigned char* always null

android - Samsung Android BLE 多重读写