java - 从 DatePicker 和 TimePicker 设置 AlarmManager

标签 java android android-alarms

我很难从 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/

相关文章:

android - 从 android 应用程序访问外部存储中某个已下载的 .sqlite 数据库

java - 如何将 Azure App Service 证书与 Java Spring 一起使用以启用 SSL

java - Jenkins 将自己的日志记录添加到 Maven 构建过程中

java - 忽略maven目标文件夹但不忽略包 "target"

Android:纵向模式下的相机预览方向

android - 如何在android中检索新拍摄照片的图像路径?

java - 保存多个警报实例

Android 无法将 intent extras 传递给 AlarmManager

android - Oreo 中的基于时间的通知

java - 在 Tomcat 5.5 中部署 web-app 时如何解决错误 listenerStart?