回答
device.width 和 device.height 返回 0 通常是因为设备的显示信息尚未初始化完成,或者脚本在极早期阶段就尝试获取了这些值。
这种情况常见于以下几种场景:
-
脚本启动时立即读取
在 Hamibot 脚本刚运行的瞬间,系统可能还未完全绑定设备的显示信息,导致device.width和device.height暂时为 0。建议稍作延迟后再读取。解决方法:添加等待或重试机制。
// 文档地址 https://docs.hamibot.com/ function getScreenSize() { let width = 0, height = 0; for (let i = 0; i < 10; i++) { width = device.width; height = device.height; if (width > 0 && height > 0) { return { width, height }; } sleep(500); // 等待 500ms 让系统初始化 } throw new Error('无法获取屏幕尺寸,请检查设备状态'); } const { width, height } = getScreenSize(); console.log(`屏幕宽度: ${width}, 高度: ${height}`); -
未授予必要的权限
尽管获取屏幕尺寸一般不需要特殊权限,但如果 Hamibot 完全无法访问设备信息(例如某些深度定制系统限制),也可能出现异常。请确保 Hamibot 已获得无障碍服务、悬浮窗、修改系统设置等基本权限。 -
运行环境问题
在部分模拟器或非标准 Android 环境中,系统接口返回的显示信息不完整,可能导致device.width和device.height为 0。建议在真实设备上测试。 -
极少数机型兼容性问题
某些老旧或小众设备的系统 API 存在缺陷,可能会导致获取不到分辨率。可通过console.log(JSON.stringify(device))查看完整设备信息输出,确认是否其他字段也异常。
✅ 推荐做法:
始终在脚本开始处加入安全检查逻辑,避免直接使用原始值:
// 文档地址 https://docs.hamibot.com/
if (device.width <= 0 || device.height <= 0) {
toast('正在获取屏幕尺寸...');
sleep(1000); // 等待系统初始化
if (device.width <= 0 || device.height <= 0) {
throw new Error('设备屏幕尺寸无效,可能是环境异常');
}
}
如果以上方法仍无法解决,请检查 Hamibot 是否为最新版本,并尝试重启服务或设备。
ℹ️ 本回答由 AI 生成,内容仅供参考