What I used as recommendations:
http://developer.android.com/guide/topics/providers/calendar-provider.html#events
http://developer.android.com/reference/android/provider/CalendarContract.Events.html
http://tools.ietf.org/html/rfc5545#section-3.8.5.3 (for RRULE)
What I have about the event:
- the date of the beginning
- recurring end date
- frequency (every day / week / month / year)
What do I need, given:
- start date: 06/11/2014 13:00
- recurring frequency: daily
- repeating end date: 06/14/2014 10:00
I need to add an Android event that lasts 1 hour every day from 11.06 to 14.06 (not inclusive - because the start hour is higher than the repeating end hour):
- 11.06 13: 00-14: 00
- 12.06 13: 00-14: 00
- 13.06 13: 00-14: 00
, ( - ):
...
ContentValues values = new ContentValues();
values.put(Events.DTSTART, event.getDate().getTime());
if (!event.isRecurring()) {
values.put(Events.DTEND, event.getEndDate().getTime());
values.putNull(Events.DURATION);
values.putNull(Events.RRULE);
values.putNull(Events.RDATE);
} else {
values.putNull(Events.DTEND);
values.put(Events.DURATION, "PT1H");
values.put(Events.RDATE, event.getRecurringEnd().getTime());
values.put(Events.RRULE,
Utils.getRRuleForRecurring(event.getRecurring()) + ";UNTIL=" + event.getRecurringEnd().getTime());
}
values.put(Events.TITLE, event.getName());
values.put(Events.DESCRIPTION, event.getDescription() == null ? ""
: event.getDescription());
values.put(Events.CALENDAR_ID, calendarId);
values.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());
...
RRule:
public static String getRRuleForRecurring(String recurring) {
recurring = recurring.toLowerCase();
if (recurring.equals("every day")) {
return "FREQ=DAILY";
}
if (recurring.equals("every month")) {
return "FREQ=MONTHLY";
}
if (recurring.equals("every week")) {
return "FREQ=WEEKLY";
}
if (recurring.equals("every year")) {
return "FREQ=YEARLY";
}
return "FREQ=DAILY";
}
: , . . ,