我很难从 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 秒设置闹钟,我会收到通知。
最佳答案
重写
所以在凌晨 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
Calendar 对象,它将以秒为单位显示当前分钟数,从而造成意外延迟。
附带说明一下,您还可以一次设置所有日历值:
cal.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(), timePicker.getCurrentHour(), timePicker.getCurrentMinute(), 0);
无论哪种方式,您需要调用的是:
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), mAlarmSender);
(不,像我的第一个建议一样需要更花哨的数学。)希望这有帮助!
关于java - 从 DatePicker 和 TimePicker 设置 AlarmManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10569206/