首页 > 解决方案 > AlarmManager 重复报警并不总是调用 BroadcastReceiver

问题描述

我有一些奇怪的问题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并不总是调用 my 。有时每分钟都会调用一次,但有时有几分钟没有任何调用!我在少数设备上对其进行了测试,它几乎每次都发生在 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%)就像一个魅力。

我应该怎么做才能确保警报总是被调用?

标签: androidalarmmanagerandroid-alarmsrepeatingalarm

解决方案


推荐阅读