Android CalendarContract重复活动,包含例外日期

前端之家收集整理的这篇文章主要介绍了Android CalendarContract重复活动,包含例外日期前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我找不到一种方法来将异常日期插入到重复发生的事件中.

上下文

我正在使用成功的事件解析.ics文件(ical格式).
这是.ics

  1. BEGIN:VCALENDAR
  2. PRODID:-//Google Inc//Google Calendar 70.9054//EN
  3. VERSION:2.0
  4. CALSCALE:GREGORIAN
  5. METHOD:PUBLISH
  6. X-WR-CALNAME:TESTING
  7. X-WR-TIMEZONE:Europe/Amsterdam
  8. X-WR-CALDESC:
  9. BEGIN:VTIMEZONE
  10. TZID:Europe/Amsterdam
  11. X-LIC-LOCATION:Europe/Amsterdam
  12. BEGIN:DAYLIGHT
  13. TZOFFSETFROM:+0100
  14. TZOFFSETTO:+0200
  15. TZNAME:CEST
  16. DTSTART:19700329T020000
  17. RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
  18. END:DAYLIGHT
  19. BEGIN:STANDARD
  20. TZOFFSETFROM:+0200
  21. TZOFFSETTO:+0100
  22. TZNAME:CET
  23. DTSTART:19701025T030000
  24. RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
  25. END:STANDARD
  26. END:VTIMEZONE
  27. BEGIN:VEVENT
  28. DTSTART;TZID=Europe/Amsterdam:20140425T103000
  29. DTEND;TZID=Europe/Amsterdam:20140425T113000
  30. RRULE:FREQ=WEEKLY;BYDAY=FR
  31. EXDATE;TZID=Europe/Amsterdam:20140516T103000
  32. EXDATE;TZID=Europe/Amsterdam:20140502T103000
  33. DTSTAMP:20140425T090449Z
  34. UID:3bb37doi3qcuaih3t03ns0q9jo@google.com
  35. ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;CN=TESTIN
  36. G;X-NUM-GUESTS=0:mailto:domain.com_o300s@group.calendar.google.com
  37. CREATED:20140425T090310Z
  38. DESCRIPTION:
  39. LAST-MODIFIED:20140425T090427Z
  40. LOCATION:
  41. SEQUENCE:0
  42. STATUS:CONFIRMED
  43. SUMMARY:my-recurring-event-with-ex
  44. TRANSP:OPAQUE
  45. END:VEVENT
  46. END:VCALENDAR

然后,该事件将通过CalendarContract API插入到Android日历中.

dtstart:20140425T103000
dtend:20140425T113000
rrule:FREQ =每周; BYDAY = FR

问题:排除日期

如果我现在查询我的日历,我将在2014年4月25日的每个星期五看到一个活动.

问题是我还需要排除一些日期(参见ical:2014年5月2日和2014年5月16日)

尝试1

我尝试只使用EXDATE字段插入16的exdate,如下所示:
android: EXDATE format when adding a calendar event
但这没有用,并且基于Android日历源代码甚至没有使用它.

尝试2

我尝试使用CONTENT_EXCEPTION_URI插入异常
通过这样的帖子:Make exception event from original recurring event?
Google日历代码https://github.com/android/platform_packages_apps_calendar/blob/master/src/com/android/calendar/EventInfoFragment.java#L1401

  1. ContentValues values2 = new ContentValues();
  2.  
  3. values2.put(CalendarContract.Events.ORIGINAL_INSTANCE_TIME,event.getAsString(CalendarContract.Events.DTSTART));
  4. values2.put(CalendarContract.Events.STATUS,CalendarContract.Events.STATUS_CANCELED);
  5.  
  6. Uri.Builder eventUriBuilder = CalendarContract.Events.CONTENT_EXCEPTION_URI.buildUpon();
  7. eventUriBuilder.appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER,"true");
  8. eventUriBuilder.appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME,accountName);
  9. eventUriBuilder.appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE,accountType);
  10. ContentUris.appendId(eventUriBuilder,dbId);
  11. Uri uriex = cr.insert(eventUriBuilder.build(),values2);

uriex总是为空.

尝试3

我尝试插入一个新事件,其中包含指向其原始事件的链接,例如在Google日历代码中,用于删除定期事件的单个条目
https://github.com/android/platform_packages_apps_calendar/blob/master/src/com/android/calendar/DeleteEventHelper.java#L361

Q

有人知道如何处理CalendarContract API中的重复事件中的异常吗?

解决方法

查询了自己的设备日历数据库.
  1. select _ID,exdate from events where exdate is not null

它包含例如exdate =“20090103T093000Z,20110101T093000Z”
所以日期必须格式化为utc(“Z”)

  1. > and based on the android calendar source code it (the field exdate)
  2. > is not event used.

当你从事件中计算/更新(事件 – )实例时,你有没有分析后启动事件?

猜你在找的Android相关文章