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

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

概述我找不到一种方法来将异常日期插入到重复发生的事件中. 上下文 我正在使用成功的事件解析.ics文件(ical格式). 这是.ics BEGIN:VCALENDARPRODID:-//Google Inc//Google Calendar 70.9054//ENVERSION:2.0CALSCALE:GREGORIANMETHOD:PUBLISHX-WR-CALNAME:TESTINGX 我找不到一种方法来将异常日期插入到重复发生的事件中.

上下文

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

BEGIN:VCALENDARPRODID:-//Google Inc//Google Calendar 70.9054//ENVERSION:2.0CALSCALE:GREGORIANMETHOD:PUBliSHX-WR-CALname:TESTINGX-WR-TIMEZONE:Europe/AmsterdamX-WR-CALDESC:BEGIN:VTIMEZONETZID:Europe/AmsterdamX-liC-LOCATION:Europe/AmsterdamBEGIN:DAYliGHTTZOFFSETFROM:+0100TZOFFSETTO:+0200TZname:CESTDTSTART:19700329T020000RRulE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUEND:DAYliGHTBEGIN:STANDARDTZOFFSETFROM:+0200TZOFFSETTO:+0100TZname:CETDTSTART:19701025T030000RRulE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SUEND:STANDARDEND:VTIMEZONEBEGIN:VEVENTDTSTART;TZID=Europe/Amsterdam:20140425T103000DTEND;TZID=Europe/Amsterdam:20140425T113000RRulE:FREQ=WEEKLY;BYDAY=FREXDATE;TZID=Europe/Amsterdam:20140516T103000EXDATE;TZID=Europe/Amsterdam:20140502T103000DTSTAMP:20140425T090449ZUID:3bb37doi3qcuaih3t03ns0q9jo@Google.comATTENDEE;CUTYPE=INdivIDUAL;RolE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;CN=TESTIN G;X-NUM-GUESTS=0:mailto:domain.com_o300s@group.calendar.Google.comCREATED:20140425T090310ZDESCRIPTION:LAST-MODIFIED:20140425T090427ZLOCATION:SEQUENCE:0STATUS:CONFIRMEDSUMMARY:my-recurring-event-with-exTRANSP:OPAQUEEND:VEVENTEND: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

ContentValues values2 = new ContentValues();values2.put(CalendarContract.Events.ORIGINAL_INSTANCE_TIME,event.getAsstring(CalendarContract.Events.DTSTART));values2.put(CalendarContract.Events.STATUS,CalendarContract.Events.STATUS_CANCELED);Uri.Builder eventUriBuilder = CalendarContract.Events.CONTENT_EXCEPTION_URI.buildUpon();eventUriBuilder.appendqueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER,"true");eventUriBuilder.appendqueryParameter(CalendarContract.Calendars.ACCOUNT_name,accountname);eventUriBuilder.appendqueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE,accountType);ContentUris.appendID(eventUriBuilder,dbID);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中的重复事件中的异常吗?

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

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

> and based on the androID calendar source code it (the fIEld exdate) > is not event used.

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

总结

以上是内存溢出为你收集整理的Android CalendarContract重复活动,包含例外日期全部内容,希望文章能够帮你解决Android CalendarContract重复活动,包含例外日期所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1135541.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存