AlarmManager重复警报并不总是调用BroadcastReceiver

时间:2018-07-01 12:24:35

标签: android alarmmanager android-alarms repeatingalarm

我在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%)就像超级按钮一样工作。

我该怎么做才能确保始终发出警报?

0 个答案:

没有答案