Skip to content

Commit

Permalink
fix: 适配安卓14截屏权限申请
Browse files Browse the repository at this point in the history
  • Loading branch information
Zebartin committed Apr 25, 2024
1 parent 6ae1c5f commit 1641dab
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 8 deletions.
1 change: 1 addition & 0 deletions NIKKE/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

- 适配咨询页面新UI;
- 模拟室、爬塔部分减少固定坐标点击(改动很少别抱有期望);
- 适配安卓14截屏权限申请([参考](https://github.com/kkevsekk1/AutoX/issues/772#issuecomment-2070098859)

新增功能或内容:

Expand Down
2 changes: 1 addition & 1 deletion NIKKE/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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后官方禁用模拟器),如果遇到问题欢迎反馈
Expand Down
50 changes: 43 additions & 7 deletions utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
});
}
// 检查屏幕方向
Expand All @@ -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;
}

0 comments on commit 1641dab

Please sign in to comment.