从的DatePicker和TimePicker设置AlarmManager(Set AlarmMan

2019-09-17 04:44发布

我非常卡住创建从一个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秒后接收器被调用,我让我的通知。

Answer 1:

改写

因此,在凌晨2点编程的时候,我并不总是在我的巅峰。 这两项修正案添加到您的代码,以获得预期(24/7)的行为:

cal.set(Calendar.HOUR_OF_DAY, timePicker.getCurrentHour());
cal.set(Calendar.SECOND, 0);

使用HOUR_OF_DAY阅读24小时的时间和SECOND到第二设置为:00。 该HOUR只读取12小时的时间,这就是为什么它的工作在凌晨2点晚上7点没有,为什么它是43000秒关(12小时)。 如果没有设置SECOND日历对象,将第二的过载电流分钟,创造出意想不到的延迟。

作为一个侧面说明,你还可以设置所有的日历值中的一次:

cal.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(), timePicker.getCurrentHour(), timePicker.getCurrentMinute(), 0);

无论怎样,你只需要调用是:

alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), mAlarmSender);      

(没有必要像我的第一个建议。更有趣的数学),希望这有助于!



文章来源: Set AlarmManager from DatePicker and TimePicker