警报管理器 INTERVAL_DAY 不工作

Alarm manager INTERVAL_DAY not working

我想要 运行 每天 8 点左右 a.m 一些代码。 我在 MainActivity

的 onCreate 中有这段代码
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.HOUR_OF_DAY, 8);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);

    Intent intent = new Intent(this, PriceAmountService.class);
    PendingIntent pintent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pintent);

但是这个 运行 每次应用程序启动时的作业。 我的代码是好是坏?这段代码在正确的地方(onCreate)吗?我做错了什么?

我的最低 API 是 14

此代码告诉 AlarmManager 第一个闹钟应该在上午 8 点,与此代码为 运行ning 的同一天。如果您 运行 在任何给定日期的 之后 上午 8 点 运行 宁此特定代码,那么第一个上午 8 点将是过去,并且 AlarmManager 可能会选择 运行 它立即,因为它错过了第一次出现并将尝试弥补它。如果您希望第一个闹钟是 下一个 日晚上 8 点,您必须在日历中添加一天来设置它。

感谢 Doug Stevenson,我通过在我的方法中添加简单的 if 解决了这个问题。 我在 8:00am 加薪的方法是:

    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.HOUR_OF_DAY, 8);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);

    if (Calendar.getInstance().after(cal)) {
        cal.add(Calendar.DAY_OF_MONTH, 1);
    }

    Intent intent = new Intent(this, PriceAmountService.class);
    PendingIntent pintent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pintent);