我一直在处理一种奇怪的行为,我无法解决。
目标是:我希望我的应用程序出现在前台,并在将来的某个时刻强制设备退出待机模式。我希望能够继续使用我的设备或使其处于待机状态。为此,我使用AlarmManager
使用setExactAndAllowWhileIdle
设置了一个警报,这将打开一个活动,该活动具有添加到FLAG_SHOW_WHEN_LOCKED
,FLAG_TURN_SCREEN_ON
和FLAG_DISMISS_KEYGUARD
标志窗口
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(true)
setTurnScreenOn(true)
} else {
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)
window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON)
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
(getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager)
.requestDismissKeyguard(this, null)
} else {
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD)
}
行为:有时(很公平地说),当警报响起时,Activity
不会显示。我注意到它在onPause()
之后立即调用onResume()
-如果Activity
会显示/设备“唤醒”,实际上是第二次致电onResume()
。
我认为可能是因为屏幕关闭了(因此Activity
自动调用了onPause()
),但是这些标志不应该以某种方式阻止它吗?为什么有时要再次调用onResume()
?我有什么明显的遗漏吗?
谢谢大家!