Как добавить повторяющиеся события программно?

Я разрабатываю приложение для добавления событий в календарь. я использую следующий код для вставки повторяющегося события, но оно принудительно закрывает приложение с ошибкой "java.lang.IllegalArgumentException: DTEND и DURATION не могут быть равны нулю для события".

код:

    ContentValues event = new ContentValues();
    event.put("calendar_id", 1);
    event.put("title", "Event Title");
    event.put("description", "Event Desc");
    event.put("eventLocation", "Event Location");
    event.put("dtstart", Long.parseLong("1315432844000"));
    event.put("rrule", "FREQ=WEEKLY;WKST=SU;BYDAY=WE");
    event.put("allDay", 1);   // 0 for false, 1 for true
    event.put("eventStatus", 1);
    event.put("hasAlarm", 1); // 0 for false, 1 for true
    Uri url = getContentResolver().insert(eventsUri, event);

Заранее спасибо

4 ответа

Решение

Это мой исправленный код.. работает нормально:)

public class mainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Uri eventsUri;
        if (android.os.Build.VERSION.SDK_INT <= 7) {

            eventsUri = Uri.parse("content://calendar/events");
        } else {

            eventsUri = Uri.parse("content://com.android.calendar/events");
        }

        Calendar cal = Calendar.getInstance();  
        ContentValues event = new ContentValues();
        event.put("calendar_id", 1);
        event.put("title", "Event Title");
        event.put("description", "Event Desc");
        event.put("eventLocation", "Event Location");
        event.put("dtstart",cal.getTimeInMillis());
        event.put("rrule", "FREQ=WEEKLY;WKST=SU;BYDAY=WE");
        event.put("allDay", 1);   // 0 for false, 1 for true
        event.put("eventStatus", 1);
        event.put("hasAlarm", 1); // 0 for false, 1 for true
        event.put("duration","P3600S");
        Uri url = getContentResolver().insert(eventsUri, event);
    }
}

Из CalendarContract.Events...

Вставить

При вставке нового события должны быть включены следующие поля:

dtstart

dtend, если событие не повторяется

продолжительность, если событие повторяется

rrule или rdate, если событие повторяется

eventTimezone

календарь_ид


Таким образом, для повторяющегося события вы должны иметь dtstart, duration, rrule / rdate, eventTimezone, calendar_id.

Так что в вашем случае

удалить dtend!

Я думаю, вы должны установить DTEND и DURATION в какое-то допустимое значение, так как "DTEND и DURATION не могут быть равны нулю для события".

Добавить повторяющееся событие в календарь Android программно:

Calendar calStart = Calendar.getInstance();
Calendar calEnd = Calendar.getInstance();
calEnd.add(Calendar.HOUR_OF_DAY, 2);

ContentResolver cr = mCtx.getContentResolver();
ContentValues values = new ContentValues();
TimeZone timeZone = TimeZone.getDefault();
values.put(CalendarContract.Events.DTSTART, calStart.getTimeInMillis());
values.put(CalendarContract.Events.DTEND, calEnd.getTimeInMillis());
values.put(CalendarContract.Events.EVENT_TIMEZONE, timeZone.getID());
values.put(CalendarContract.Events.TITLE, "Event Title");
values.put(CalendarContract.Events.DESCRIPTION, "Event Description");
values.put(CalendarContract.Events.CALENDAR_ID,Long.parseLong("Your_Calendar_Id"));

    if (Your_Event_Is_Daily) {
        values.put("rrule", "FREQ=DAILY");
    } else if (Your_Event_Is_Weekly) {
        values.put("rrule", "FREQ=WEEKLY");
    } else if (Your_Event_Is_Monthly) {
        values.put("rrule", "FREQ=MONTHLY");
    } else if (Your_Event_Is_Yearly) {
        values.put("rrule", "FREQ=YEARLY");
    }

Uri uri1 = cr.insert(CalendarContract.Events.CONTENT_URI, values);
String eventID = uri1.getLastPathSegment();
Log.i("Event Id", eventID);

Здесь eventID - это идентификатор ссылки на событие. Если вам нужно обновить или удалить событие, будет использоваться eventID.

Готово

Другие вопросы по тегам