From 1641dabb6739cc2920fc81c0f3f8b9ecfceae4f8 Mon Sep 17 00:00:00 2001 From: Zebartin <16185081+Zebartin@users.noreply.github.com> Date: Thu, 25 Apr 2024 23:13:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=80=82=E9=85=8D=E5=AE=89=E5=8D=9314?= =?UTF-8?q?=E6=88=AA=E5=B1=8F=E6=9D=83=E9=99=90=E7=94=B3=E8=AF=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NIKKE/CHANGELOG.md | 1 + NIKKE/README.md | 2 +- utils.js | 50 +++++++++++++++++++++++++++++++++++++++------- 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/NIKKE/CHANGELOG.md b/NIKKE/CHANGELOG.md index 0aa0caa..2f0d42a 100644 --- a/NIKKE/CHANGELOG.md +++ b/NIKKE/CHANGELOG.md @@ -2,6 +2,7 @@ - 适配咨询页面新UI; - 模拟室、爬塔部分减少固定坐标点击(改动很少别抱有期望); +- 适配安卓14截屏权限申请([参考](https://github.com/kkevsekk1/AutoX/issues/772#issuecomment-2070098859)) 新增功能或内容: diff --git a/NIKKE/README.md b/NIKKE/README.md index 145824c..1e5ffd5 100644 --- a/NIKKE/README.md +++ b/NIKKE/README.md @@ -2,7 +2,7 @@ > ❗❗❗注意事项 > -> - 暂不清楚使用此类软件是否会被视为外挂而被封禁账号,其他游戏比如明日方舟的[MAA](https://github.com/MaaAssistantArknights/MaaAssistantArknights)和碧蓝航线的[ALAS](https://github.com/LmeSzinc/AzurLaneAutoScript),都也是基于图像识别的自动化软件,似乎并没有出现封禁的情况。至于NIKKE如何,自求多福吧。建议有顾虑但又想尝试的人可以先使用小号尝试,并使用沙盒之类的方式将运行环境与其他手游和重要APP隔离开来; +> - 暂不清楚使用此类软件是否会被视为外挂而被封禁账号(2024年4月底更新:已有部分用户被封禁,请自行判断,谨慎使用),其他游戏比如明日方舟的[MAA](https://github.com/MaaAssistantArknights/MaaAssistantArknights)和碧蓝航线的[ALAS](https://github.com/LmeSzinc/AzurLaneAutoScript),都也是基于图像识别的自动化软件,似乎并没有出现封禁的情况。至于NIKKE如何,自求多福吧。建议有顾虑但又想尝试的人可以先使用小号尝试,并使用沙盒之类的方式将运行环境与其他手游和重要APP隔离开来; > - 运行脚本时,由于需要进行频繁的文字识别或图像匹配,可能会增加不少耗电量,不太确定; > - 脚本仅对本人使用的设备(分辨率2400×1080,竖屏)做了适配,不清楚对其他设备的兼容如何,因此**只建议愿意和喜欢折腾的人尝试**,不一定能正常使用(2023/02/04更新: 经尝试,模拟器上使用尚且算可用;2023/08后官方禁用模拟器),如果遇到问题欢迎反馈 diff --git a/utils.js b/utils.js index 5a39d4e..bc5e870 100644 --- a/utils.js +++ b/utils.js @@ -509,15 +509,50 @@ function enterPwd(pwd) { } function requestScreenCaptureAuto() { + let hasPermission = false; //安卓版本高于Android 9 if (device.sdkInt > 28) { //等待截屏权限申请并同意 threads.start(function () { - let t = packageName('com.android.systemui').textMatches(/(允许|确定|立即开始)/).findOne(10000); - if (t != null) - t.click(); - else - log('没有“允许/确定/立即开始”按钮出现'); + const ele = textMatches(/(.*录.[或\/]投.*|允许|立即开始|确定|统一)/).findOne(10 * 1000); + if (ele === null) { + console.error("未能发现截图权限弹窗"); + } + let target = null; + for (let i = 0; i < 10; ++i) { + sleep(200); + let t = null; + const cancel = textMatches(/(取消|禁止)/).find(); + const confirm = textMatches(/(允许|确定|立即开始)/).find(); + if (!confirm.empty() && confirm.get(0).text()) { + log('找到确定按钮'); + t = confirm.get(0).bounds(); + } else if (!cancel.empty()) { + log('找到取消按钮'); + const cancelBounds = cancel.get(0).bounds(); + t = new android.graphics.Rect( + device.width - cancelBounds.right, + cancelBounds.top, + device.width - cancelBounds.left, + cancelBounds.bottom + ); + } + if (t.top < t.bottom && t.bottom <= device.height) { + target = { bounds: t }; + break; + } + } + if (target === null) { + console.error('处理截图权限弹窗失败'); + return; + } + log(`点击区域:${target.bounds}`); + for (let i = 0; i < 10; ++i) { + if (hasPermission) + return; + clickRect(target, 0.5, 0); + sleep(1000); + } }); } // 检查屏幕方向 @@ -526,7 +561,8 @@ function requestScreenCaptureAuto() { let isTablet = (device.width > device.height); // 平板横边 > 竖边 log(`申请截屏权限:${isLandscape ? '横' : '竖'}屏,设备类型:${isTablet ? '平板' : '手机'}`); if (!requestScreenCapture((isLandscape ^ isTablet) == 1)) { - log("请求截图失败"); + toastLog("请求截图失败"); exit(); } -} + hasPermission = true; +} \ No newline at end of file