AlarmManager, повторяющий сигнал тревоги, не всегда вызывает BroadcastReceiver - PullRequest
0 голосов
/ 01 июля 2018

У меня странная проблема с AlarmManager и повторяющимся сигналом тревоги.

Я устанавливаю повторяющийся будильник на запуск каждую минуту:

val i = Intent(applicationContext, CheckStatusReceiver::class.java)
val alarmIntent = PendingIntent.getBroadcast(context.applicationContext, 1001, i, PendingIntent.FLAG_UPDATE_CURRENT)
val alarmManager = applicationContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 60 * 1000, 60 * 1000, alarmIntent)

Проблема в том, что когда на устройстве выключен экран и он не подключен к компьютеру (adb), мой BroadcastReceiver не всегда вызывается. Иногда он вызывается каждую минуту, но иногда есть несколько минут без звонка! Я тестировал его на нескольких устройствах, и это происходит почти каждый раз на 4.2, 4.4, а иногда и на 6.0.1, всего несколько раз случалось на 5.1 и 7.1. Неважно, если батарея полностью заряжена или разряжена.

Я получил мой зарегистрированный в AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="test.example.package">
    [... permissions ...]
    <application
        [....]
        <receiver android:name=".receiver.CheckStatusReceiver" />
    </application>
</manifest>

А мой приемник просто регистрируется для целей тестирования:

class CheckStatusReceiver: BroadcastReceiver(), AnkoLogger {
    override fun onReceive(context: Context, intent: Intent?) {
        info("CheckStatusReceiver onReceive called")
    }
}

Когда экран включен или устройство подключено к adb с отключенным экраном. обычно (99%) работает как брелок.

Что я должен сделать, чтобы сигнал тревоги всегда вызывался?

...