回答
如果在不重启设备的情况下,device.height
返回了 0,这可能是因为某些系统级别的初始化未完成或权限问题。以下是一些可以尝试的解决方法:
1. 检查权限
虽然你提到重新给权限没有效果,但仍然需要确保脚本已经获得了所有必要的权限。可以通过以下方式检查和请求权限:
// 检查是否具有修改系统设置的权限
if (!auto.hasPermission("modify-system-settings")) {
auto.requestPermission("modify-system-settings");
}
如果没有正确获取权限,可能会导致某些设备信息无法正常读取。
2. 延迟脚本执行
有时候设备需要一些时间来完成初始化,尤其是在系统资源紧张或启动后立即运行脚本时。可以尝试在脚本中加入一个延迟:
sleep(3000); // 延迟3秒
log("屏幕高度: " + device.height);
通过增加延迟,给设备更多时间来完成初始化。
3. 使用其他方式获取屏幕高度
如果 device.height
始终返回 0,可以尝试通过其他方式获取屏幕分辨率。例如,使用 context
获取屏幕尺寸:
let windowManager = context.getSystemService(context.WINDOW_SERVICE);
let display = windowManager.getDefaultDisplay();
let metrics = new android.util.DisplayMetrics();
display.getRealMetrics(metrics);
let screenHeight = metrics.heightPixels;
let screenWidth = metrics.widthPixels;
log("屏幕高度: " + screenHeight);
log("屏幕宽度: " + screenWidth);
这种方法直接从 Android 的窗口管理器获取屏幕分辨率,可能会绕过 device.height
的问题。
4. 检查是否有覆盖层或悬浮窗干扰
某些设备上的悬浮窗或其他覆盖层可能会干扰屏幕信息的获取。确保没有其他应用或服务在屏幕上显示悬浮窗或其他覆盖内容。
可以通过以下代码隐藏所有悬浮窗:
floaty.closeAll(); // 关闭所有悬浮窗
5. 重新初始化 Hamibot 环境
Hamibot 的运行环境可能存在临时性问题,尝试重新初始化环境可能会解决问题:
auto.waitFor(); // 等待无障碍服务启动
toast("重新初始化完成");
log("屏幕高度: " + device.height);
6. 使用第三方工具验证
如果以上方法都无法解决问题,可以尝试使用第三方工具(如 ADB)验证设备的屏幕分辨率是否正常:
adb shell wm size
这条命令会返回设备的屏幕分辨率。如果返回值正常,则说明问题出在脚本环境上。
7. 切换到备用 API
如果问题依然存在,可以尝试使用备用 API,例如通过 UiSelector
或其他模块间接获取屏幕高度:
let bounds = text("某个控件文本").findOne().bounds();
let screenHeight = bounds.bottom; // 使用控件的底部坐标作为参考
log("屏幕高度: " + screenHeight);
总结
如果 device.height
返回 0,建议按以下步骤逐一排查:
- 确保权限已正确授予。
- 增加延迟,等待设备初始化完成。
- 使用
context
和DisplayMetrics
获取屏幕高度。 - 检查是否有悬浮窗或其他覆盖层干扰。
- 重新初始化 Hamibot 环境。
- 使用 ADB 验证设备分辨率。
- 尝试备用 API。
如果以上方法均无效,请提供更多上下文信息(例如设备型号、Android 版本等),以便进一步分析问题原因。
本回答由 AI 生成,内容仅供参考
0