我有一个可能在屏幕锁定时启动的活动。我使用此代码使其工作:
if (powerManager != null) {
wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK
| PowerManager.ACQUIRE_CAUSES_WAKEUP, "App:wakeuptag");
wakeLock.acquire(1000 * 60);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(true);
setTurnScreenOn(true);
} else {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
}
到目前为止,它仅在用户锁定屏幕之前应用程序处于前台时才有效。如果在锁定屏幕之前应用程序处于bacgkround状态,则此代码将不起作用。
编辑:我发现不是因为应用程序处于后台,而是因为通过按HOME按钮关闭了该应用程序,如果我使用后退按钮关闭应用程序,则一切正常。因此,这在某种程度上与HOME按钮相关。