【发布时间】:2015-01-16 17:11:56
【问题描述】:
以编程方式创建重复事件让我很生气(我需要在没有日历意图的情况下这样做)。我一直在阅读很多帖子,但似乎没有什么对我完全有效。这是我当前的代码:
Calendar beginTime = Calendar.getInstance();
Calendar endTime = Calendar.getInstance();
Calendar reminderBeginTime = Calendar.getInstance();
long startMillis = 0;
long endMillis = 0;
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
long calID = 1;
values.put(CalendarContract.Events.CALENDAR_ID, calID);
values.put(CalendarContract.Events.TITLE, title);
values.put(CalendarContract.Events.EVENT_TIMEZONE, "Europe/London");
beginTime.set(2015, 0, 16, 9, 00);
startMillis = beginTime.getTimeInMillis();
endTime.set(2015, 0, 16, 24, 00);
endMillis = endTime.getTimeInMillis();
values.put(CalendarContract.Events.DTSTART, startMillis);
values.put(CalendarContract.Events.DTEND, endMillis);
values.put(CalendarContract.Events.RRULE, "FREQ=WEEKLY;UNTIL=20160116");
Uri eventUri = cr.insert(CalendarContract.Events.CONTENT_URI, values);
这段代码的结果有点不可预测。在循环规则中,我将循环的最终日期设置为 2016 年 2 月 16 日,但它只会创建循环事件,直到……2015 年 5 月,或 8 月,有时是 9 月,4 月……不知道为什么。
根据官方文档:
对于重复事件,除了 RRULE 或 RDATE 之外,您还必须包含 DURATION。请注意,如果您通过 INSERT Intent 插入事件,则此规则不适用,如使用意图插入事件中所述 - 在这种情况下,您可以将 RRULE 与 DTSTART 和 DTEND 结合使用,并且日历应用程序会转换它会自动持续一段时间。
因此,我从 RRULE 中删除了“Until=...”,并添加了 10 周的持续时间,例如:
values.put(CalendarContract.Events.DURATION, "P10W");
但应用程序崩溃,记录如下:
一个事件中不能同时包含 DTEND 和 DURATION
在某种程度上,我将 DTEND 理解为特定事件结束的时刻,我不明白为什么我必须删除它......无论如何,如果我删除它,它会每天和永远设置提醒。
【问题讨论】:
-
做一些关于
AlarmManager的研究,这就是你要找的课程。 -
嗯,谢谢,但不,AlarmManager 不会做我想做的事。
标签: android android-activity calendar