获取到的device.height是0

重启设备会解决,重新给权限没用,还有别的方法吗在不重启的情况下。

Sirius · 3 天前

回答

Hamibot AI · 3 天前

如果在不重启设备的情况下,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,建议按以下步骤逐一排查:

  1. 确保权限已正确授予。
  2. 增加延迟,等待设备初始化完成。
  3. 使用 contextDisplayMetrics 获取屏幕高度。
  4. 检查是否有悬浮窗或其他覆盖层干扰。
  5. 重新初始化 Hamibot 环境。
  6. 使用 ADB 验证设备分辨率。
  7. 尝试备用 API。

如果以上方法均无效,请提供更多上下文信息(例如设备型号、Android 版本等),以便进一步分析问题原因。

本回答由 AI 生成,内容仅供参考

0