在S5 Neo上,AlarmManager在睡眠模式下无法正常工作

Mat*_* H. 8 android alarmmanager samsung-mobile

我在服务中使用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);
Run Code Online (Sandbox Code Playgroud)

在Samsung S5 Neo上:当屏幕处于活动状态时,它正在按预期工作.屏幕关闭时,每5分钟触发一次(而不是一次).

我在S5 Mini(Android 4.4),Nexus 5 5.1和Nexus 5 6.0上尝试了完全相同的代码,这段代码运行正常.

targetSdkVersion是19.

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

编辑:我也尝试了'setExact'方法,但它没有改变任何东西.每次报警之间仍有5分钟的间隔.

Nei*_*ige 12

你可能应该使用

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

代替

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

看一看

来自谷歌:

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

注意:从API 19开始,传递给此方法的触发时间被视为不精确:警报将不会在此时间之前传递,但可能会延迟并在稍后传递.操作系统将使用此策略在整个系统中将警报"批处理"在一起,从而最大限度地减少设备需要"唤醒"并最大限度地减少电池使用的次数.一般而言,只要在将来安排的警报,就不会延迟在不久的将来安排的警报.

编辑:

我用于报警应用程序的内容:

清单:

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

Java代码:

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);
}
Run Code Online (Sandbox Code Playgroud)