回答
实现截图功能主要分为申请权限、执行截图和处理图片三个步骤。以下是具体的实现方法和代码示例。
核心步骤
- 等待自动化服务就绪:使用
auto.waitFor()确保脚本运行环境准备完毕。 - 申请截图权限:调用
requestScreenCapture()函数。第一次运行时会弹出系统权限请求,需选择“总是允许”。 - 执行截图:调用
captureScreen()获取屏幕图像对象。 - 保存或使用:将图像保存到本地或用于找图、OCR 识别等后续操作。
代码示例
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
// 1. 申请截图权限,参数 true 表示横屏,false 表示竖屏,不填则跟随当前屏幕方向
if (!requestScreenCapture()) {
toastLog('没有授予 Hamibot 屏幕截图权限');
hamibot.exit();
}
// 2. 等待权限生效,避免立即截图失败
sleep(1000);
// 3. 截取屏幕并返回 Image 对象
var img = captureScreen();
// 4. 定义保存路径
var path = '/sdcard/screen_capture.png';
// 5. 保存图片到指定路径
img.saveTo(path);
// 6. 将图片加入相册以便查看
media.scanFile(path);
toastLog('截图已保存至:' + path);
hamibot.exit();
函数说明
-
requestScreenCapture([landscape])- 向系统申请屏幕截图权限。
landscape:布尔值。true为横屏截图,false为竖屏截图。不指定则由当前设备屏幕方向决定。- 该函数只需在脚本开始时执行一次,无需每次截图都调用。
- 返回布尔值,表示是否请求成功。
-
captureScreen()- 截取当前屏幕并返回一个
Image对象。 - 如果没有截图权限,执行该函数会抛出异常。
- 短时间内连续调用可能返回同一张截图,因为设备截图更新需要时间(一般 16ms)。
- 截取当前屏幕并返回一个
-
images.captureScreen(path)- 直接截取当前屏幕并以 PNG 格式保存到
path路径。 - 如果文件不存在会被创建,存在则会被覆盖。
- 该函数不会返回图像对象。
- 直接截取当前屏幕并以 PNG 格式保存到
注意事项
- 权限授权:首次运行脚本时,系统会弹出截图权限请求窗口,必须手动点击允许,否则无法截图。建议在 Hamibot 界面运行申请权限的脚本,避免在其他应用界面运行时出现黑屏。
- 执行延迟:
requestScreenCapture()执行成功后,需要等待一定时间(建议 1 秒左右)才有截图可用。立即调用captureScreen()可能会等待几百毫秒。 - 脚本兼容性:使用的 JavaScript 引擎为 Rhino 1.7.15,编写代码时避免使用箭头函数表达式和函数默认参数值。
- 性能优化:截图操作较为消耗资源,不要在极短时间内高频循环调用。如果需要连续截图,建议设置适当的间隔(如 1 秒)。
ℹ️ 本回答由 AI 生成,内容仅供参考