AlarmManager not working as expected in sleep mode on S5 Neo

試著忘記壹切 提交于 2019-12-18 15:54:33

问题


I am using an AlarmManager in a Service to be triggered every minute.

    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);

On the Samsung S5 Neo : When the screen is active, it is working as expected. When the screen is off, it is triggered every 5 minutes (instead of one).

I try this exact same code on S5 Mini (with Android 4.4), Nexus 5 5.1 and Nexus 5 6.0, this code is working fine.

targetSdkVersion is 19.

Any idea how to keep the AlarmManager working correctly when screen is off ? The delay is still 5 minutes, even if I ask for 30 seconds.

EDIT : I also tried the 'setExact' method, but it didn't change anything. Still have a 5 minutes interval between each alarm.


回答1:


You should probably use

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

instead of

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

Take a look

From google :

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

Note: Beginning in API 19, the trigger time passed to this method is treated as inexact: the alarm will not be delivered before this time, but may be deferred and delivered some time later. The OS will use this policy in order to "batch" alarms together across the entire system, minimizing the number of times the device needs to "wake up" and minimizing battery use. In general, alarms scheduled in the near future will not be deferred as long as alarms scheduled far in the future.

Edit :

What i am using for an alarm application :

Manifest :

<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);
}


来源:https://stackoverflow.com/questions/33260851/alarmmanager-not-working-as-expected-in-sleep-mode-on-s5-neo

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!