Я делаю приложение будильника, которое звонит будильнику в определенное время.Я использую AlarmManger с BroadcastReceiver.Но иногда это не работает, когда устройство находится в спящем режиме.Но отлично работает, когда устройство включено и используется.Хотя я получаю wakelock перед срабатыванием будильника и использую RTC_WAKEUP с AlarmManager, но ничего не помогает.Пожалуйста, проверьте мой код ниже:
Разрешение в AndroidManifest.xml
<uses-permission android:name="android.permission.WAKE_LOCK"/>
Приемник Зарегистрирован в AndroidManifest.xml
<receiver android:name="com.packagename.receiver.AzanAlarm"/>
Функция, которую я использую для установки будильника
fun setAzan(context: Context, reqCode: Int, offset: Long, pendingIntent: PendingIntent) {
if (offset > 0) {
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + offset, pendingIntent)
}
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + offset, pendingIntent)
}
else {
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + offset, pendingIntent)
}
}
}
Вот код моего приемника вещания
class AzanAlarm: BroadcastReceiver(){
override fun onReceive(context: Context, intent: Intent) {
val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
val wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyAppName:Azan")
wakeLock!!.acquire(30000) // timout after 30 seconds to play comp. azan
showAzanNotification()
}
}
Сигнал тревоги срабатывает, и уведомление приходит, когда устройство не спит.Но иногда не работает, когда устройство выключено в течение длительного времени.