带有ELAPSED_REALTIME_WAKEUP的AlarmManager不更新PendingIntent

时间:2014-08-26 11:21:32

标签: android alarmmanager android-pendingintent repeatingalarm

这没有任何问题:

Intent mIntent = new Intent(getClass().getPackage().getName() + ".ALARM_TRIGGER");

PendingIntent pi = PendingIntent.getBroadcast(
                BackgroundService.getInstance(),
                mAlarmID,
                mIntent,
                PendingIntent.FLAG_UPDATE_CURRENT
        );

mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), interval, pi);

代码有效。每次我们运行此代码时,它都会使用ID(mAlarmID)更新待处理的意图。

但是,如果手机处于深度睡眠状态,则上述代码不会触发。所以我们必须使用ELAPSED_REALTIME_WAKEUP。

    mAlarmManager.setRepeating(
            AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime() + startIn,
            interval,
            pi
    );

检查adb shell dumpsys alarm后,RTC_WAKEUP始终查找并更新正确的待处理意图。但是,使用带有ELAPSED_REALTIME_WAKEUP的警报管理器,无论相同的ID,始终都会创建新的待处理意图。那是什么意思?

    每次代码运行时,#li>在#1中,你总是会在dumpsys报警中找到一个报警。 每次代码运行时,#li>在#2中,你会在dumpsys警报中找到ONE MORE警报。

这个错误吗?然后如何使用此代码,以便始终有最多1个警报?

0 个答案:

没有答案