我正在每分钟触发一次服务中使用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上:
屏幕处于 Activity 状态时,它按预期方式工作。
当屏幕关闭时,每5分钟(而不是一分钟)触发一次。

我在S5 Mini(使用Android 4.4),Nexus 5 5.1和Nexus 5 6.0上尝试使用了完全相同的代码,但该代码运行良好。

targetSdkVersion为19。

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

编辑 :
我也尝试了'setExact'方法,但没有任何改变。每个警报之间还有5分钟的间隔。

最佳答案

您可能应该使用
AlarmManager#setExact(int type, long triggerAtMillis, PendingIntent operation)
代替
AlarmManager#set(int type, long triggerAtMillis, PendingIntent operation))
Take a look

来自谷歌:
AlarmManager#set(int type, long triggerAtMillis, PendingIntent operation))


编辑 :

我正在为警报应用程序使用什么:

显现 :
<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);
}

关于android - 在S5 Neo上的 sleep 模式下,AlarmManager无法按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33260851/

10-12 01:20