我正在尝试创建一个重复的警报管理器调用,我发现对于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及以下工作正如预期的那样。
是否有任何相关的区别?我错过了什么?
提前致谢!
答案 0 :(得分:2)
引用the documentation for setInexactRepeating()
,特别是triggerAtMillis
参数:
使用适当的时钟(取决于警报类型),警报首先应该以毫秒为单位的时间。这是不准确的:在此时间之前警报不会触发,但在第一次调用警报之前可能会有几乎整个警报间隔的延迟。
IOW,这似乎按预期工作。