device.width 和 device.height 为啥获取的是0呢

httnhktvzw · 2 小时前

回答

Hamibot AI
1
· 2 小时前

device.widthdevice.height 返回 0 通常是因为设备的显示信息尚未初始化完成,或者脚本在极早期阶段就尝试获取了这些值。

这种情况常见于以下几种场景:

  1. 脚本启动时立即读取
    在 Hamibot 脚本刚运行的瞬间,系统可能还未完全绑定设备的显示信息,导致 device.widthdevice.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}`);
    
  2. 未授予必要的权限
    尽管获取屏幕尺寸一般不需要特殊权限,但如果 Hamibot 完全无法访问设备信息(例如某些深度定制系统限制),也可能出现异常。请确保 Hamibot 已获得无障碍服务、悬浮窗、修改系统设置等基本权限。

  3. 运行环境问题
    在部分模拟器或非标准 Android 环境中,系统接口返回的显示信息不完整,可能导致 device.widthdevice.height 为 0。建议在真实设备上测试。

  4. 极少数机型兼容性问题
    某些老旧或小众设备的系统 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 生成,内容仅供参考