【问题标题】:AlarmManager setInexactRepeating not working in Android 4.1.2, works on Android 4.3 and AboveAlarmManager setInexactRepeating 在 Android 4.1.2 中不起作用,适用于 Android 4.3 及更高版本
【发布时间】:2015-03-04 13:45:21
【问题描述】:

我正在尝试创建一个重复的警报管理器调用,我发现对于 Android 4.1、4.2,它不会在第一次触发,我需要等待间隔才能看到进程正常工作:

public void startScheduler() {
    AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);

    alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime() + 100, // now
            AlarmManager.INTERVAL_FIFTEEN_MINUTES, // Interval
            getSchedulerPendingIntent());

}

这仅在达到 AlarmManager.INTERVAL_FIFTEEN_MINUTES 而不是“triggerAtMillis”参数时有效。问题是这适用于 Android 4.4 和 Android 5.0。

如果我用 setRepeating 更改 setInexactRepeating 它可以在 Android 4.1 和 4.2 上完美运行,所以:

public void startScheduler() {
    AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);

    alarm.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime() + 100, // now
            AlarmManager.INTERVAL_FIFTEEN_MINUTES, // Interval
            getSchedulerPendingIntent());

}

完美适用于 Android 4.1、4.2、4.3、4.4 和 5.0。唯一的缺点是,对于 Android Api 19 及更高版本,它将作为不精确重复工作,而对于 android API 19 及以下版本,则按预期工作。

这有什么相关的区别吗?我错过了什么?

提前致谢!

【问题讨论】:

标签: android scheduled-tasks alarmmanager scheduler


【解决方案1】:

引用the documentation for setInexactRepeating(),特别是triggerAtMillis参数:

闹钟应该首先响起的时间(以毫秒为单位),使用适当的时钟(取决于闹钟类型)。这是不准确的:在此时间之前警报不会触发,但在第一次调用警报之前可能会有几乎整个警报间隔的延迟。

IOW,这似乎按预期工作。

【讨论】:

  • 我在发布我的问题后读到了。问题是......它在不同的 API 版本中工作方式不同。我必须第一次手动执行任务,当您有机会使用 AlarmManager 完成所有任务时,这有点烦人。无论如何感谢您指出这一点!
猜你喜欢
  • 2014-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 2014-03-21
相关资源
最近更新 更多