2012-05-13 40 views
1

集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秒后设置了闹钟,并且收到通知。

+0

我想我现在解决了它。 – Sam

+0

我已经解决暂时减去12小时hehehe ..我知道不是最好的解决方案,但我仍然努力。 – rafuru

回答

6

重写

所以在凌晨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);  

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

+0

OMG谢谢! ,但当我设置闹钟时,我仍然会立即收到通知:/ – rafuru

+0

我在日志中获得此值:差异:-43242 – rafuru

+0

当前时间是22:53我试图在22:54或22上设置闹钟: 55,即使我在23:55设置,我也会得到即时通知 – rafuru