我已按照以下链接https://developer.android.com/training/scheduling/alarms.html。
RTC示例第一个,为所有日子的特定时间设置闹钟。即使遵循相同的代码,警报也不会在被触发时触发。相反,在设置时间之后立即触发notification
,这是在时间选择器的帮助下完成的。以下是我的代码段
AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, NotificationReceiver.class);
PendingIntent intentalarm = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY,4);
calendar.set(Calendar.MINUTE, 30);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, intentalarm);
而不是setRepeating
我也试过setInexactRepeating
但是没有运气。我还想补充一下,当我改变了
calendar.getTimeInMillis()
并使用SystemClock.elapsedRealtime() + 120 * 1000
警报在设置完2分钟后完全触发。
但是当使用calendar.getTimeInMillis()
时,预期的工作不会发生,而是立即触发。
如果有人可以帮我找到解决方案,那确实会非常有帮助。只有一个注释,我可以了解如果在当前设备时间之前设置警报,警报会立即触发,但这不是这种情况。
NotificationReceiver.class
工作正常,因为它已生成并显示在标题上。但它出现的时间是引起关注的原因。
答案 0 :(得分:0)
您正在使用setTimeInMillis和hourofday and minute。
如果您希望在4:30触发闹钟,只需添加小时和分钟。
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY,4);
calendar.set(Calendar.MINUTE, 30);`
答案 1 :(得分:0)
我可以确定我面临的问题。我正在使用24小时格式的TimePicker。但是我使用了SimpleDateFormat“hh:mm”。 'h'代表如下“h->小时上午/下午(1-12)”。因此,我在AM设置的任何警报都会正确触发。当我使用1-12'h'格式设置PM的时间时,警报设置为AM时间,并且因为与设备时间相比,该时间已经过去,警报/通知立即被触发。正确的格式使用的是“HH:MM”,其中“H”代表“H->小时(0-23)”。这解决了我的问题。
检查在线纪元时间转换器上的TimeinMillis帮助我确定了这个问题。再次感谢帮助我。