jitcor / FakeScreen

MIT License
38 stars 3 forks source link

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

Closed nian0114 closed 5 months ago

nian0114 commented 5 months ago

我的系统是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依然生效,如果可以的话,请作者赐教。感谢

jitcor commented 5 months ago

以下代码可以试下

// 使用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)
nian0114 commented 5 months ago

以下代码可以试下

// 使用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前台的情况下保证屏幕点亮。