jitcor/FakeScreen

通过电源键关屏后应用本身的保持屏幕唤醒锁无效了

Closed this issue · 2 comments

我的系统是MIUI,锁定时间设置为30s。
我的APP,它本身能阻止进入锁屏,保持屏幕唤醒状态。
但是在插件启用的情况下,通过Power键关闭屏幕,屏幕唤醒锁失效了,30s后会进入锁屏状态。

屏幕唤醒锁代码如下
val flags = PowerManager.SCREEN_DIM_WAKE_LOCK or PowerManager.ACQUIRE_CAUSES_WAKEUP
wakeLock = powerManager.newWakeLock(flags, "ScreenStream::MJPEG-Tag").apply { acquire() }

刚查看了下API的说明
//如果持有该类型的wakelock锁,则按Power键灭屏后,即使允许屏幕、按键灯灭,也不会释放该锁,CPU不会进入休眠状态
public static final int PARTIAL_WAKE_LOCK;
//Deprecated,如果持有该类型的wakelock锁,则使屏幕保持亮/Dim的状态,键盘灯允许灭,按Power键灭屏后,会立即释放
public static final int SCREEN_DIM_WAKE_LOCK;
//Deprecated,如果持有该类型的wakelock锁,则使屏幕保持亮的状态,键盘灯允许灭,按Power键灭屏后,会立即释放
public static final int SCREEN_BRIGHT_WAKE_LOCK
//Deprecated,如果持有该类型的wakelock锁,则使屏幕、键盘灯都保持亮,按Power键灭屏后,会立即释放
public static final int FULL_WAKE_LOCK

SCREEN_DIM_WAKE_LOCK遇到POWER键会释放,这个能否把时间捕获然后处理了,让SCREEN_DIM_WAKE_LOCK依然生效,如果可以的话,请作者赐教。感谢

以下代码可以试下

// 使用PARTIAL_WAKE_LOCK
val flags = PowerManager.PARTIAL_WAKE_LOCK or PowerManager.ACQUIRE_CAUSES_WAKEUP
wakeLock = powerManager.newWakeLock(flags, "ScreenStream::MJPEG-Tag").apply { acquire() }
// 在Activity中设置窗口标志
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)

以下代码可以试下

// 使用PARTIAL_WAKE_LOCK
val flags = PowerManager.PARTIAL_WAKE_LOCK or PowerManager.ACQUIRE_CAUSES_WAKEUP
wakeLock = powerManager.newWakeLock(flags, "ScreenStream::MJPEG-Tag").apply { acquire() }
// 在Activity中设置窗口标志
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)

感谢回复
经过测试PARTIAL_WAKE_LOCK也是无效,他可以保证后台唤醒但是还是会触发android的锁屏机制。
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) 这个能够在APP前台的情况下保证屏幕点亮。