Я создал несколько событий и сохранил данные в таблице sqlite, но не в системном календаре. Однако я хотел бы иметь оповещение/напоминание для этих событий, аналогичное другим событиям, хранящимся в системе.
Ссылаясь на приведенный ниже код, детали события помещаются в таблицу «CalendarAlerts», а в широковещательном приемнике используется alertCursor для поиска данных о событии с временем начала, близким к текущему времени.
Код хорошо работал, если событие хранилось в системе с «длинным» идентификатором события. Но когда я пытаюсь поместить данные моего события sqlite в «CalendarAlerts» с «строковым» идентификатором события. Он показывает, что данные успешно вставлены в таблицу, но я бы не стал запрашивать результат в классе «Получатель предупреждений».
Некоторое время искал в Google, и кажется, что не так много людей говорят на тему «CalendarAlerts». Хорошо, если кто-нибудь поделится опытом в этом вопросе.
Настройка менеджера тревог
Uri alertUri = CalendarAlerts.CONTENT_URI;
long alarmMillis = (long) mStart - (long)(min*60*1000);
ContentValues alertValues =AlertUtils.makeContentValues(eventIdentifier,mStart, mEnd,alarmMillis, 0);
context.getContentResolver().insert(alertUri, alertValues);
public static ContentValues makeContentValues(String eventId, long begin, long end,
long alarmTime, int minutes) {
ContentValues values = new ContentValues();
values.put(CalendarAlerts.EVENT_ID, eventId);
values.put(CalendarAlerts.BEGIN, begin);
values.put(CalendarAlerts.END, end);
values.put(CalendarAlerts.ALARM_TIME, alarmTime);
long currentTime = System.currentTimeMillis();
values.put(CalendarAlerts.CREATION_TIME, currentTime);
values.put(CalendarAlerts.RECEIVED_TIME, 0);
values.put(CalendarAlerts.NOTIFY_TIME, 0);
values.put(CalendarAlerts.STATE, CalendarAlerts.STATE_SCHEDULED);
values.put(CalendarAlerts.MINUTES, minutes);
return values;
}
AlertReceiver.java
Cursor alertCursor = cr.query(CalendarAlerts.CONTENT_URI, ALERT_PROJECTION,
(ACTIVE_ALERTS_SELECTION + currentMillis), ACTIVE_ALERTS_SELECTION_ARGS,
ACTIVE_ALERTS_SORT);