AutoX icon indicating copy to clipboard operation
AutoX copied to clipboard

安卓14申请截屏权限时无法找到“立即开始”对应的控件

Open Zebartin opened this issue 1 year ago • 3 comments

  1. Autox.js 版本:656

  2. Autox.js 下载渠道:https://github.com/kkevsekk1/AutoX/releases

  3. Android 版本:Android 14

  4. Android 机型:三星 / 小米13Pro

  5. Android 系统类别:OneUI 16 / MIUI 14

  6. VSCODE Autox.js 扩展版本(可选,如果是连接电脑的问题需要填):

  7. 问题描述:

    更新到android 14之后,申请截屏权限时无法找到“立即开始”对应的控件。

    尝试用以下代码列出所有屏幕下半区域的控件,可以找到“取消”,但没有“立即开始”或其他clickable的控件,日志如下方所示 boundsInside(0, device.height / 2, device.width, device.height).find().forEach(x=>log(x));

  8. 报错日志(可选):

  9. 屏幕截图(可选):

Zebartin avatar Dec 18 '23 04:12 Zebartin

可能是安卓14新加入的限制,可尝试计算坐标点击,虽然不一定有效

aiselp avatar Dec 23 '23 09:12 aiselp

坐标点击是能生效的,只是不太灵活,想看看autox这边有什么办法

Zebartin avatar Dec 23 '23 10:12 Zebartin

同样问题,小米12 更新hyperos 安卓14之后,出现立即开始点击失效

zhyxxxxxx avatar Feb 21 '24 08:02 zhyxxxxxx

let hasGetCapturePremission = false

function autoPermisionScreenCapture() {
    if (hasGetCapturePremission) {
        log("当前有截图权限");
        return;
    }

    console.log("自动申请截图权限");
    let Thread = threads.start(function () {
        if (auto.service == null) {
            toast("无障碍未开启")
            return
        }

        let ele = textMatches(/(.*录屏或投屏.*|.*录制或投射.*|允许|立即开始|统一)/).findOne(10 * 1000)

        if (ele == null) {
            toast("未能发现截图权限弹窗")
            return
        }
        log("已经弹出权限确认界面")

        let eles = textMatches(/(.*录屏或投屏.*|.*录制或投射.*|允许|立即开始|统一)/).find()

        if (eles.empty()) {
            toast("未能发现截图权限弹窗")
            return
        }

        let notMiui14Style = false
        for (let e of eles) {
            let text = e.text()
            if (text.indexOf('立即开始') > 0 || text.indexOf('允许') > 0 || text.indexOf('统一')) {
                notMiui14Style = true
                break
            }
        }

        if (notMiui14Style) {
            log("可以找到立即开始")
            let allowEle = textMatches(/(允许|立即开始|统一)/).findOne(10 * 1000);
            if (allowEle) {
                sleep(1500)
                if (allowEle.clickable()) {
                    log("点击 元素")
                    let ok = allowEle.click();
                    return ok;
                } else {
                    let b = allowEle.bounds()
                    log("按压 坐标")
                    return press(b.centerX(), b.centerY(), 1)
                }
            }
        } else {
            //  在miui 14中,立即开始,不可找到。使用推测的方式来处理
            log("推测 立即开始 坐标")

            let cancel = text("取消").findOne(10 * 10000)
            if (cancel) {
                log("取消 按钮 存在")
                let x = device.width - cancel.bounds().centerX()
                let y = cancel.bounds().centerY()

                log("点击 推测坐标 %s %s", x, y)
                sleep(1500)
                press(x, y, 1)
            } else {
                log("取消按钮不存在,推测失败")
            }
        }

    });

    log("申请权限");

    //在一个会话中,调用两次申请截图权限。就会卡死。
    if (!requestScreenCapture(false)) {
        toast("请求截图权限失败");
        return false;
    } else {

        Thread.interrupt();
        log("已获得截图权限");
        hasGetCapturePremission = true;
        return true;
    }
}

autoPermisionScreenCapture()

fanlushuai avatar Apr 22 '24 16:04 fanlushuai

此lssue由于长期未活动已被自动关闭,如问题任然存在,请重新打开lssue

github-actions[bot] avatar Jul 29 '24 23:07 github-actions[bot]