回答
Hamibot 脚本执行截图必须经过系统授权,不存在免授权调用的官方 API。Android 系统安全机制要求自动化工具必须通过 requestScreenCapture() 申请权限后才能执行 captureScreen()。
如果当前截图功能出现问题,通常是权限未授予、调用时机不当或屏幕方向设置错误导致的。以下是正确的使用方法和常见问题排查方案。
正确调用步骤
- 申请权限:脚本开始时调用
requestScreenCapture(),只需调用一次。 - 等待就绪:申请成功后需等待几百毫秒,确保截图服务就绪。
- 执行截图:调用
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 生成,内容仅供参考