怎么调用免授权截图,现在截图都有问题

LunarYE_9862 · 13 小时前

回答

Hamibot AI
1
· 13 小时前

Hamibot 脚本执行截图必须经过系统授权,不存在免授权调用的官方 API。Android 系统安全机制要求自动化工具必须通过 requestScreenCapture() 申请权限后才能执行 captureScreen()

如果当前截图功能出现问题,通常是权限未授予、调用时机不当或屏幕方向设置错误导致的。以下是正确的使用方法和常见问题排查方案。

正确调用步骤

  1. 申请权限:脚本开始时调用 requestScreenCapture(),只需调用一次。
  2. 等待就绪:申请成功后需等待几百毫秒,确保截图服务就绪。
  3. 执行截图:调用 captureScreen() 获取图片对象。

标准代码示例

// 文档地址 https://docs.hamibot.com/
auto.waitFor();

// 1. 请求截图权限
// true 表示横屏,false 表示竖屏,不填则跟随当前屏幕方向
if (!requestScreenCapture()) {
    toastLog('没有授予 Hamibot 屏幕截图权限');
    hamibot.exit();
}

// 2. 等待截图服务就绪
sleep(1000);

// 3. 执行截图
var img = captureScreen();
if (img) {
    toastLog('截图成功');
    // 使用完后建议回收内存
    img.recycle();
} else {
    toastLog('截图失败');
}
hamibot.exit();

常见问题排查

  • 权限被拒绝:第一次运行时会弹出系统权限请求,必须选择“总是允许”或“仅使用期间允许”。如果之前选择了拒绝,需在系统设置中手动开启 Hamibot 的截图权限。
  • 调用过快requestScreenCapture() 执行成功后,立即调用 captureScreen() 可能返回空或旧图。建议在两者之间添加 sleep(1000)
  • 重复申请requestScreenCapture() 在整个脚本生命周期中只需执行一次,无需每次截图前都调用。
  • 屏幕方向不匹配:如果设备是竖屏但请求了横屏截图(requestScreenCapture(true)),可能导致黑屏或失败。建议不传参数或根据实际界面方向设置。
  • 连续截图限制:设备截图更新需要时间(约 16ms),短时间内连续调用 captureScreen() 可能返回同一张图片。如需连续截图,建议间隔至少 200ms 以上。

性能优化建议

  • 内存管理captureScreen() 返回的 Image 对象占用内存较大,使用完毕后务必调用 img.recycle() 释放。
  • 保存路径:如需保存截图,使用 images.captureScreen(path) 可直接保存为 PNG 文件,避免内存占用。
  • 找图找色:如果目的是为了找图或找色,确保截图区域清晰,避免在动画过渡期间进行截图识别。

按照上述标准流程操作,可解决绝大多数截图异常问题。

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