警报管理器未正确安排警报

Posted

技术标签:

【中文标题】警报管理器未正确安排警报【英文标题】:Alarm Manager not scheduling alarm properly 【发布时间】:2017-02-02 09:01:44 【问题描述】:

我正在用这个设置闹钟

    Calendar now = Calendar.getInstance();
    Calendar alarm = Calendar.getInstance();
    alarm.set(Calendar.HOUR_OF_DAY,21);
    alarm.set(Calendar.MINUTE,30);
    if (alarm.before(now)) 
        alarm.add(Calendar.DAY_OF_MONTH, 1);  //Add 1 day if time selected before now
    
         AlarmManager alarmManager =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(context,Receiver.class);
   PendingIntent pi = PendingIntent.getBroadcast(context,(int)alarm.getTimeInMillis(),i,0);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, (int)alarm.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pi);

但即使我将它安排在第二天,它也会在保存警报后立即触发。 不知道是什么问题已经搜索了很多,但其他人都可以正常工作

【问题讨论】:

M 已经加了一天,如果时间过去了 不,它不工作它会在设置后立即触发 你为什么要投到int 哦,所以 sorie 实际上是在为待处理的意图投射 int。非常感谢它没有立即触发 是的,它没有立即触发,但是当我今天测试时,它没有在预定时间触发 【参考方案1】:

您将long 时间戳转换为int,从而丢失位并更改实际时间戳值。您最终会得到一个已经过去的时间,因此它会立即执行意图。

PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarm.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);

请注意,我删除了最后一行中的 (int) 演员表。

【讨论】:

我改了,没有立即触发,甚至没有在预定的时间触发

以上是关于警报管理器未正确安排警报的主要内容,如果未能解决你的问题,请参考以下文章

普罗米修斯中的警报管理器未启动

java 使用警报管理器类安排警报

Android在另一个完成时设置警报管理器

Xamarin 警报管理器 Android

无法在警报管理器中设置日历日期

如何在警报管理器中清除以前的警报?