【问题标题】:Alarm Manager- SetRepeating - INTERVAL_DAY not firing at all警报管理器 - SetRepeating - INTERVAL_DAY 根本没有触发
【发布时间】:2015-10-07 09:15:57
【问题描述】:

我正在尝试设置每天下午 2:20 响起的闹钟。这是代码

Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY,14);
        calendar.set(Calendar.SECOND,20);

        AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        PendingIntent pendingIntent;
        Intent intentService = new Intent(context, DownloadService.class);

        //setting alarm to run at 2:20 pm
        pendingIntent= PendingIntent.getService(context,0,intentService,PendingIntent.FLAG_UPDATE_CURRENT);
           alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent);

当我使用5*60*1000 作为间隔值时,它可以正常工作。但是当我使用AlarmManager.INTERVAL_DAY 时,它不会消失。有人能告诉我上面的代码是否正确吗?谢谢。

【问题讨论】:

  • 您能否澄清一下,即使是最初的警报也不会响起还是只是重复?您只是在更改间隔,还是在进行任何其他更改以使其正常工作。

标签: android alarmmanager repeatingalarm


【解决方案1】:

我想你只是监督了 INTERVAL_DAY 中的描述:

可用的不精确重复间隔由以下人员识别 setInexactRepeating(int, long, long, PendingIntent) 运行时 API 19 之前的 Android。

在您的代码中,您使用 setRepeating 而不是 setInexactRepeating AlarmManager.INTERVAL_DAY

这里是intervalMillis参数的区别:

设置重复

intervalMillis 以毫秒为单位的后续重复之间的间隔 闹钟。

setInexactRepeating

intervalMillis 以毫秒为单位的后续重复之间的间隔 闹钟。在 API 19 之前,如果这是其中之一 INTERVAL_FIFTEEN_MINUTES、INTERVAL_HALF_HOUR、INTERVAL_HOUR、 INTERVAL_HALF_DAY,或 INTERVAL_DAY,那么警报将是 与其他警报相位对齐以减少唤醒次数。 否则,警报将被设置为好像应用程序已调用 setRepeating(int, long, long, PendingIntent)。从 API 19 开始,所有 重复警报将是不准确的,并且会与其他警报进行批处理 警报,无论其规定的重复间隔如何。

希望我能帮上忙!

【讨论】:

    【解决方案2】:

    只需替换这一行:

    calendar.set(Calendar.SECOND,20);
    

    这一行:

    calendar.set(Calendar.MINUTE,20);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多