我在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%)就像超级按钮一样工作。
我该怎么做才能确保始终发出警报?