通过传递calendar.getTimeInMillis()使用AlarmManager设置通知,不会立即触发通知

时间:2017-01-02 12:56:42

标签: android notifications calendar alarm

我已按照以下链接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工作正常,因为它已生成并显示在标题上。但它出现的时间是引起关注的原因。

2 个答案:

答案 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帮助我确定了这个问题。再次感谢帮助我。