Create a repeating event with reminder until specific day without Intent in Android?

oikonomopo picture oikonomopo · Nov 30, 2012 · Viewed 17.3k times · Source

I have an android app that downloads with a service some drugs info.

For example (fludex white round 2 24-02-2012),means a drug named fludex ,white and round,must be given 2 times per day from today untill 24-01-2012.

Now i want after drug info downloading , to add repeated event with drug info to the calendar silently/programmatically(without user interaction). So that from today untill 24-01-2012 every 10 am and 10pm to have a reminder 10 minutes before to take his drug. My app will be for android 2-4. How can i do that,i'm confused from my searching so far.

Second question:How can i delete only the events(and their reminders) made from my application,so when i sync my drug therapy to delete all previous events and produce new events based on the new drug therapy i receive from my service?

Answer

oikonomopo picture oikonomopo · Dec 14, 2012
        ContentResolver cr = ctx.getContentResolver();
        ContentValues values = new ContentValues();

        values.put(CalendarContract.Events.DTSTART, dtstart);
        values.put(CalendarContract.Events.TITLE, title);
        values.put(CalendarContract.Events.DESCRIPTION, comment);

        TimeZone timeZone = TimeZone.getDefault();
        values.put(CalendarContract.Events.EVENT_TIMEZONE, timeZone.getID());

        // default calendar
        values.put(CalendarContract.Events.CALENDAR_ID, 1);

        values.put(CalendarContract.Events.RRULE, "FREQ=DAILY;UNTIL="
                + dtUntill);
        // for one hour
        values.put(CalendarContract.Events.DURATION, "+P1H");

        values.put(CalendarContract.Events.HAS_ALARM, 1);

        // insert event to calendar
        Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values);

where dtuntil is

    SimpleDateFormat yyyymmdd = new SimpleDateFormat("yyyymmdd");
    Calendar dt = Calendar.getInstance();

    // where untilDate is a date instance of your choice,for example 30/01/2012
    dt.setTime(untilDate);

    // if you want the event until 30/01/2012 we add one day from our day
    // because UNTIL in RRule sets events Before the last day want for event
    dt.add(Calendar.DATE, 1);
    String dtUntill = yyyymmdd.format(dt.getTime());

    // Uri
    Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values);

    // get the event ID that is the last element in the Uri
    long eventID = Long.parseLong(uri.getLastPathSegment());

    // add 10 minute reminder for the event
    ContentValues reminders = new ContentValues();
    reminders.put(Reminders.EVENT_ID, eventID);
    reminders.put(Reminders.METHOD, Reminders.METHOD_ALERT);
    reminders.put(Reminders.MINUTES, 10);

    Uri uri = cr.insert(Reminders.CONTENT_URI, reminders);

Ref: Recurrence Rule