Создать повторяющееся событие с напоминанием до определенного дня без намерения в Android?

У меня есть приложение для Android, которое загружает с помощью службы информацию о наркотиках.

Например, (fludex white round 2 24-02-2012) означает, что препарат под названием fludex, white and round, необходимо принимать 2 раза в день с сегодняшнего дня до 24-01-2012.

Теперь я хочу, чтобы после загрузки информации о препарате, добавить повторяющееся событие с информацией о препарате в календарь автоматически/программно (без взаимодействия с пользователем). Так что с сегодняшнего дня и до 24-01-2012 каждые 10:00 и 22:00 иметь напоминание за 10 минут до приема препарата. Мое приложение будет для Android 2-4. Как я могу это сделать, я запутался в своих поисках до сих пор.

Второй вопрос: как я могу удалить только события (и их напоминания), сделанные из моего приложения, поэтому, когда я синхронизирую свою лекарственную терапию, чтобы удалить все предыдущие события и создать новые события на основе новой лекарственной терапии, которую я получаю от моей службы?


person oikonomopo    schedule 30.11.2012    source источник
comment
взгляните на эту проблему: stackoverflow.com/questions/ 28871921/   -  person Sun    schedule 01.07.2015


Ответы (3)


        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

person oikonomopo    schedule 14.12.2012
comment
ctx — переменная контекста. - person oikonomopo; 04.06.2014
comment
@oikonomopo Я получаю 09-23 00:00:12.632: E/AndroidRuntime(813): android.database.sqlite.SQLiteException: ожидается 1 строка из этого запроса, но запрос не вернул данных. проверьте запрос: SELECT canPartiallyUpdate FROM view_events WHERE _id = ? ошибка - person Ruch1234; 22.09.2014
comment
Это отлично работает на моем устройстве HTC 4.0.2, но тот же код не работает на устройстве Samsung 4.4.2. ТУ); Это событие шоу только в течение нескольких недель. Есть предположения, почему? - person Deepak Sharma; 07.05.2015

Вот хороший пример того, что вам нужно.

Обновите для получения дополнительной информации о календаре и внедрении напоминаний и других вещей см. это

Вы также можете получить помощь из следующего кода

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);
person Ali Imran    schedule 30.11.2012
comment
Это создает/устанавливает напоминание/будильник на определенную дату. Но я хочу, чтобы это повторялось в течение N дней с этого момента. И я также хочу вставлять события в календарь, чтобы пользователь мог их видеть. - person oikonomopo; 01.12.2012
comment
можем ли мы установить продолжительность, используя putExtra, то есть намерение.putExtra (длительность, пользовательское время); - person Ali; 17.03.2015

Чтобы создать повторяющееся событие с привязкой ко времени в течение нескольких дней, нам нужно использовать 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");
person saurabh dhillon    schedule 04.01.2019