AlarmManager setRepeating方法不会每60分钟完全关闭一次

时间:2014-03-05 16:56:15

标签: calendar alarmmanager

我的问题是,我有一个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

非常感谢!

1 个答案:

答案 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

}