AutoJs6 icon indicating copy to clipboard operation
AutoJs6 copied to clipboard

保持屏幕常亮只在autojs内生效,且无法取消常亮。

Open fgvsuiye opened this issue 8 months ago • 6 comments

device.keepScreenOn(3600*1000)
device.keepScreenDim([timeout])

以上两个命令按照文档添加参数后依然只能在autojs应用内保持常亮, 应用外无法生效,屏幕照常熄灭。 且使用 device.cancelKeepingAwake() 后,autojs内还是会保持常亮。 只能强行停止autojs才能取消常亮。

autojs版本:6.6.2 安卓版本:15 系统版本:HyperOS 2.0.107.0

fgvsuiye avatar Apr 17 '25 02:04 fgvsuiye

是否可以在 AutoJs6 失去窗口焦点时保持设备屏幕不会超时关闭, 这个与安卓操作系数有关, 不能保证功能一定生效.

device.cancelKeepingAwake 方法, 必须与 device.keepScreenOndevice.keepScreenDim 在同一个脚本 (或同一个 Script Runtime) 中使用才能生效.

SuperMonster003 avatar Apr 17 '25 15:04 SuperMonster003

修改时长。 我程序大概都是跑1分钟。 偶尔多出10-20秒,偶尔少10-20秒。 所以我都是设置1分钟时长,就是60秒。 device.keepScreenOn(601000) 即便超过了60秒,它依旧会亮一段时间,才自动息屏。 如果你不放心,可以多加一分钟。 或者使用device.keepScreenDim(60 * 1000),就更安全了。 如果你设置36001000,当无法通过程序取消的时候,搞不好就要等1小时。

wengzhenquan avatar Apr 20 '25 12:04 wengzhenquan

无法取消常亮,除非强行终止autojs6才行。。。。。有解决办法么

xdx233 avatar Jul 23 '25 17:07 xdx233

无法取消常亮,除非强行终止autojs6才行。。。。。有解决办法么

把autojs6强行停止后,莫名其妙的device.keepScreenOn();后再用cancelKeepingAwake就有效果了,好奇怪。。。。。我是任何引用页面都生效,6.6.1版本

xdx233 avatar Jul 23 '25 18:07 xdx233

public class Device {

    private PowerManager.WakeLock mWakeLock;

    public void cancelKeepingAwake() {
        if (mWakeLock != null && mWakeLock.isHeld()) {
            mWakeLock.release();
        }
    }
}

可以看到, device.cancelKeepingAwake 方法是脚本级别的, 而非应用级别的, 因为 mWakeLock 不是 static, 而是保存在 Device 实例里.

AutoJs 6 每执行一个新的脚本, 就会为该脚本创建独立的 JS 引擎, 随之也会生成一次新的 Device 对象. keepScreenOn() 获得的 mWakeLock 存放在脚本自己的 Device 实例中, 因此其他脚本是调用 cancelKeepingAwake 是无法作用到此脚本的.

因此, 有:

device.cancelKeepingAwake 方法, 必须与 device.keepScreenOn 或 device.keepScreenDim 在同一个脚本 (或同一个 Script Runtime) 中使用才能生效.

SuperMonster003 avatar Jul 26 '25 11:07 SuperMonster003

// 无障碍锁屏
function autoLockScreen() {
    // 无障碍服务调用系统锁屏
    auto.service.performGlobalAction(android.accessibilityservice.AccessibilityService.GLOBAL_ACTION_LOCK_SCREEN);
}

用这个可以锁屏

wengzhenquan avatar Sep 21 '25 19:09 wengzhenquan