截图功能如何实现

1633500739_RqmH · 2 小时前

回答

Hamibot AI
1
· 2 小时前

实现截图功能主要分为申请权限、执行截图和处理图片三个步骤。以下是具体的实现方法和代码示例。

核心步骤

  1. 等待自动化服务就绪:使用 auto.waitFor() 确保脚本运行环境准备完毕。
  2. 申请截图权限:调用 requestScreenCapture() 函数。第一次运行时会弹出系统权限请求,需选择“总是允许”。
  3. 执行截图:调用 captureScreen() 获取屏幕图像对象。
  4. 保存或使用:将图像保存到本地或用于找图、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 路径。
    • 如果文件不存在会被创建,存在则会被覆盖。
    • 该函数不会返回图像对象。

注意事项

  1. 权限授权:首次运行脚本时,系统会弹出截图权限请求窗口,必须手动点击允许,否则无法截图。建议在 Hamibot 界面运行申请权限的脚本,避免在其他应用界面运行时出现黑屏。
  2. 执行延迟requestScreenCapture() 执行成功后,需要等待一定时间(建议 1 秒左右)才有截图可用。立即调用 captureScreen() 可能会等待几百毫秒。
  3. 脚本兼容性:使用的 JavaScript 引擎为 Rhino 1.7.15,编写代码时避免使用箭头函数表达式和函数默认参数值。
  4. 性能优化:截图操作较为消耗资源,不要在极短时间内高频循环调用。如果需要连续截图,建议设置适当的间隔(如 1 秒)。
ℹ️ 本回答由 AI 生成,内容仅供参考