1

我很难从 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 秒后设置闹钟并收到通知。

4

1 回答 1

6

改写

因此,在凌晨 2 点编程时,我并不总是处于最佳状态。以下是添加到您的代码中的两项修改,以获得您期望的行为 (24/7):

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

用于HOUR_OF_DAY读取 24 小时时间并将SECOND秒设置为 :00。唯一读取 12 小时的HOUR时间,这就是为什么它在凌晨 2 点而不是晚上 7 点工作以及为什么它是 43000 秒(12 小时)。如果不设置SECONDCalendar 对象,它将携带当前分钟秒数,从而产生意外延迟。

作为旁注,您还可以一次设置所有日历值:

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

无论哪种方式,您只需要调用:

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

(不,像我的第一个建议一样需要更多花哨的数学。)希望这会有所帮助!

于 2012-05-13T05:46:29.750 回答