在Android中没有Intent的特定日期创建带有提醒的重复事件?

时间:2012-11-30 19:53:51

标签: android calendar reminders rrule

我有一个Android应用程序,可以通过服务下载一些药物信息。

例如(fludex white round 2 24-02-2012),指一种名为fludex,白色和圆形的药物,从今天开始每天必须给予2次,直到24-01-2012。

现在我希望在下载药物信息后,以静默/编程方式将重复的药物信息添加到日历中(无需用户交互)。 所以,从今天开始,直到每天上午10点到晚上10点,才会在10分钟前提醒他服药。 我的应用程序将用于Android 2-4。 我怎么能这样做,到目前为止我对我的搜索感到困惑。

第二个问题:我如何只删除我的应用程序中的事件(及其提醒),所以当我同步我的药物治疗以删除所有先前的事件并根据我从我的服务中收到的新药物治疗产生新事件?

3 个答案:

答案 0 :(得分:15)

        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);

其中dtuntil是

    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);

参考:Recurrence Rule

答案 1 :(得分:2)

这是你想要的Example好的see this

<强>更新 有关日历和实施提醒或其他内容{{3}}

的更多信息

您还可以从以下代码中获得帮助

Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
intent.putExtra("beginTime", date);
intent.putExtra("allDay", true);
intent.putExtra("rrule", "FREQ=YEARLY"); //To set the repeat rule
intent.putExtra("endTime", date);
intent.putExtra("title", summary);

答案 2 :(得分:0)

要在几天内创建一个有时间限制的重复发生事件,我们需要使用CalendarContract.Events.RRULE。 规则是组合频率,计数等。

让我们说我们需要创建一个事件,该事件在一天的特定时间段内每天发生10天:

Intent(Intent.ACTION_INSERT)
            .setData(CalendarContract.Events.CONTENT_URI)
            .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
                    beginCalendarTime.getTimeInMillis())
            .putExtra(CalendarContract.EXTRA_EVENT_END_TIME,
                    endCalendarTime.getTimeInMillis())
            .putExtra(CalendarContract.Events.TITLE, heading)
            .putExtra(CalendarContract.Events.DESCRIPTION, "To be added")
            .putExtra(CalendarContract.Events.EVENT_LOCATION, location)
            .putExtra(CalendarContract.Events.RRULE, "FREQ=DAILY;COUNT=10");