Alarmmanager не запускает вещательный приемник, когда устройство выключено в течение 1 часа или более - PullRequest
1 голос
/ 02 июля 2019

Я делаю приложение будильника, которое звонит будильнику в определенное время.Я использую 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()
    }
}

Сигнал тревоги срабатывает, и уведомление приходит, когда устройство не спит.Но иногда не работает, когда устройство выключено в течение длительного времени.

...