我的问题是,我有一个Alarmmanager,每隔60分钟到达一个规定的时间。 然而,这只是第一次工作。 每隔一个小时,Alarmmanager就会延迟工作2到3分钟。
这是一个例子:
小时设定为4 p。米 分钟设置为32 计时器设置为60分钟
Calendar timeOff9 = Calendar.getInstance();
timeOff9.set(Calendar.HOUR_OF_DAY, hour);
timeOff9.set(Calendar.MINUTE, minute);
am.setRepeating(AlarmManager.RTC_WAKEUP, timeOff9.getTimeInMillis(), timer*60000, pi);
也许有人知道为什么会这样?
我正在使用API级别15.截至文档API 19 setRepeating == setInexactRepeating
非常感谢!
答案 0 :(得分:0)
您几乎通过参考文档回答了自己的问题。
API 19确实推断对setRepeating
的调用将被视为setInexactRepeating
。
处理此问题的方法是在处理接收警报时设置新警报(> = API 19)。 e.g。
@SuppressLint("NewApi")
private void setAlarm(AlarmManager alarmManager, long time,
PendingIntent pIntent, boolean repeat) {
if (android.os.Build.VERSION.SDK_INT >= 19) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, time, pIntent);
} else {
if (repeat) {
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, time,
AlarmManager.INTERVAL_DAY * 7, pIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, time, pIntent);
}
}
}
然后当你收到警报时..
/***
* From version 19 (KitKat) notification that are set repeating aren't
* exact, so the notification needs to be scheduled again each time it is
* received
*/
private void scheduleNextNotification() {
if (android.os.Build.VERSION.SDK_INT < 19) {
return;
}
// set alarm that would have otherwise been repeating
}