在S5 Neo上,AlarmManager在休眠模式下不能正常工作



我正在使用每分钟触发一次的服务中的AlarmManager。

    PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 0,
            getUpdateServiceIntent(mContext), PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    // Cancel any pending Intent
    am.cancel(pendingIntent);
    // Set a new one
    am.set(AlarmManager.RTC_WAKEUP, 60000, pendingIntent);
关于三星S5 Neo:当屏幕处于活动状态时,它按预期工作。当屏幕关闭时,每5分钟触发一次(而不是一次)。

我在S5 Mini (Android 4.4), Nexus 5 5.1和Nexus 5 6.0上尝试了相同的代码,这段代码工作得很好。

targetSdkVersion is 19.

当屏幕关闭时,如何保持AlarmManager正常工作?即使我要求30秒,延迟仍然是5分钟。

编辑:我还尝试了"setExact"方法,但它没有改变任何东西。每次报警间隔仍为5分钟

你应该使用

AlarmManager#setExact(int type, long triggerAtMillis, PendingIntent operation)

代替

AlarmManager#set(int type, long triggerAtMillis, PendingIntent operation))

看一看

From google:

AlarmManager#set(int type, long triggerAtMillis, PendingIntent operation))

注意:从API 19开始,传递给此方法的触发时间被视为不精确的:在此时间之前不会发送警报,但可能会延迟并在一段时间后发送。操作系统将使用此策略,以便在整个系统中"批量"警报,最大限度地减少设备需要"唤醒"的次数,并最大限度地减少电池使用。一般情况下,只要调度的是远期告警,调度的近期告警就不会被延迟。

编辑:

我使用的报警应用程序:

清单:

<uses-permission android:name="android.permission.WAKE_LOCK"/>

Java Code:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  AlarmManager.AlarmClockInfo alarmClockInfo = new AlarmManager.AlarmClockInfo(nextAlarm.getTimeInMillis(), pendingIntent);
  alarmManager.setAlarmClock(alarmClockInfo, pendingIntent);
}else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
  alarmManager.setExact(android.app.AlarmManager.RTC_WAKEUP, nextAlarm.getTimeInMillis(), pendingIntent);
}else {
  alarmManager.set(android.app.AlarmManager.RTC_WAKEUP, nextAlarm.getTimeInMillis(), pendingIntent);
}

最新更新