脚本如何关闭自身的应用,没有root权限
第 1 条补充
· 2 个月前
脚本申请了屏幕录制权限,如何主动释放掉屏幕录制权限
第 2 条补充
· 2 个月前
如何截长图
回答
在没有 root 权限的情况下,关闭自身应用(即脚本当前运行的应用)可以通过以下方法实现:
// 文档地址 https://docs.hamibot.com/
// 方法1:使用系统返回键退出当前应用
for(var i = 0; i < 5; i++) {
back();
sleep(500);
}
// 方法2:强制停止当前应用(需要无障碍服务)
function closeCurrentApp() {
var currentPackage = currentPackage();
if(currentPackage) {
app.openAppSetting(currentPackage);
sleep(1000);
var stopBtn = textMatches(/(强.*|停.*|结.*)/).findOne(3000);
if(stopBtn && stopBtn.enabled()) {
stopBtn.parent().click();
sleep(500);
var confirm = textMatches(/(确.*|定.*)/).findOne(3000);
if(confirm) confirm.click();
}
back();
}
}
// 使用示例
closeCurrentApp();
注意事项:
- 方法1通过多次返回操作尝试退出应用,适用于大多数应用
- 方法2通过打开应用设置强制停止应用,需要无障碍服务支持
- 使用前请确保脚本已获取无障碍服务权限
- 强制停止应用可能会导致应用数据丢失,谨慎使用
补充回答 1
在 Hamibot 中,主动释放屏幕录制权限可以通过以下方法实现:
// 文档地址 https://docs.hamibot.com/
// 方法1:调用释放屏幕截图的API
images.stopScreenCapture();
// 方法2:通过脚本结束自动释放
// 脚本运行结束时系统会自动释放权限
hamibot.exit();
// 方法3:无操作超时自动释放
// 当脚本长时间无操作时(约5分钟),系统会自动回收权限
如果需要临时禁用屏幕录制权限但不结束脚本运行,可以使用:
// 暂时禁用并重新请求权限
images.stopScreenCapture();
sleep(1000);
if(!requestScreenCapture()){
toast("重新获取权限失败");
}
注意事项:
images.stopScreenCapture()
是主动释放权限的标准方法- 脚本正常退出时也会自动释放权限
- 部分系统可能有权限缓存,彻底释放可能需要重启设备
补充回答 2
在 Hamibot 中截取长屏(滚动截图)可以通过以下方法实现:
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
// 请求截屏权限
if (!requestScreenCapture()) {
toast("截图权限获取失败");
exit();
}
// 获取屏幕宽高
var screenWidth = device.width;
var screenHeight = device.height;
var scrollHeight = screenHeight * 3; // 假设要截3屏高度
// 开始截屏区域(左上角坐标和宽高)
var x = 0, y = 0;
var capturedHeight = 0;
var finalImage = images.createImage(screenWidth, scrollHeight);
while (capturedHeight < scrollHeight) {
// 截取当前屏幕
var currentScreen = captureScreen();
// 将当前屏幕拼接到最终图片
finalImage.drawBitmap(currentScreen, 0, capturedHeight);
// 模拟滑动
gesture(1000, [screenWidth/2, screenHeight-100], [screenWidth/2, 100]);
sleep(1000); // 等待滑动完成
capturedHeight += screenHeight;
// 检查是否到达底部
if (currentScreen.equals(captureScreen())) {
break;
}
}
// 保存最终图片
var path = "/sdcard/long_screenshot_" + new Date().getTime() + ".png";
images.save(finalImage, path);
toast("长截图已保存: " + path);
注意事项:
- 需要先授予屏幕截图权限
scrollHeight
可根据需要调整要截取的长度- 滑动速度 (
gesture
参数) 可能需要根据具体设备调整 - 部分应用的UI结构可能影响拼接效果
- 建议在稳定的网络环境下操作
ℹ️ 本回答由 AI 生成,内容仅供参考