Установить AlarmManager из DatePicker и TimePicker
Я очень застрял в создании будильника из DatePicker и TimePicker...
Это код моей попытки:
Calendar cal=Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, datePicker.getDayOfMonth());
cal.set(Calendar.MONTH, datePicker.getMonth());
cal.set(Calendar.YEAR, datePicker.getYear());
cal.set(Calendar.HOUR, timePicker.getCurrentHour());
cal.set(Calendar.MINUTE, timePicker.getCurrentMinute());
long millis=cal.getTimeInMillis();
Intent intent=new Intent(CalendarView.this,AvisoReceiver.class);
PendingIntent mAlarmSender=PendingIntent.getBroadcast(CalendarView.this,23454546, intent,0);
AlarmManager alm=(AlarmManager)getSystemService(ALARM_SERVICE);
alm.set(AlarmManager.RTC_WAKEUP, millis,mAlarmSender);
Но когда я устанавливаю будильник из TimePicker и DatePicker, мой приемник не вызывается.
Если я установлю будильник через 3 секунды после вызова приемника и получу уведомление.
1 ответ
перезапись
Поэтому, когда я программирую в 2 часа ночи, я не всегда на вершине своей игры. Вот две поправки, которые нужно добавить в ваш код, чтобы получить ожидаемое поведение (24/7):
cal.set(Calendar.HOUR_OF_DAY, timePicker.getCurrentHour());
cal.set(Calendar.SECOND, 0);
использование HOUR_OF_DAY
читать круглосуточно и SECOND
установить второе значение:00. HOUR
только читает 12 часов, поэтому он работал в 2 часа ночи, а не в 7 часов вечера, и почему это было 43000 секунд (12 часов). Без настройки SECOND
объект Calendar будет переносить текущие минуты, создавая неожиданную задержку.
Как примечание, вы также можете установить все значения календаря одновременно:
cal.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(), timePicker.getCurrentHour(), timePicker.getCurrentMinute(), 0);
В любом случае, все, что вам нужно для вызова, это:
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), mAlarmSender);
(Нет, нужна более сложная математика, как мое первое предложение.) Надеюсь, это поможет!