78 lines
2.1 KiB
Markdown
78 lines
2.1 KiB
Markdown
# SCREENSHOT **[提案]**
|
|
|
|
> [返回动作目录](README.md) · [统一选择器](../selector.md) · [基本运行约定](../security.md)
|
|
|
|
SCREENSHOT 用于诊断或人工复核。当前代码尚未实现。
|
|
|
|
## 1. 任务结构
|
|
|
|
截取控件区域:
|
|
|
|
~~~json
|
|
{
|
|
"id": "capture-result",
|
|
"action": "SCREENSHOT",
|
|
"packageName": "com.example.target",
|
|
"scope": {
|
|
"type": "ELEMENT",
|
|
"selector": {
|
|
"resourceId": "com.example.target:id/result"
|
|
},
|
|
"paddingDp": 8
|
|
},
|
|
"format": "PNG",
|
|
"outputField": "resultImage",
|
|
"maxBytes": 5242880,
|
|
"timeoutMs": 5000
|
|
}
|
|
~~~
|
|
|
|
首批范围:
|
|
|
|
- `SCREEN`:当前显示屏。
|
|
- `ELEMENT`:唯一控件边界。
|
|
- `REGION`:显式屏幕比例区域。
|
|
|
|
首批格式支持 PNG;需要控制体积时再增加 JPEG 和质量参数。
|
|
|
|
## 2. 执行规则
|
|
|
|
1. 确认系统版本和无障碍服务具备截图能力。
|
|
2. 等待 packageName 和可选元素 selector。
|
|
3. 调用系统截图接口。
|
|
4. 在内存中按 scope 裁剪。
|
|
5. 编码并检查 `maxBytes`。
|
|
6. 保存到应用私有目录,返回生成的 artifactId。
|
|
|
|
任务不能提供任意文件系统路径。是否遮盖、上传或定期清理按实际部署需求增加,不作为首版动作的固定流程。
|
|
|
|
Android 无障碍截图从 API 30 开始可用;服务配置还需要声明对应能力。API 不支持时返回明确结果。
|
|
|
|
## 3. 输出
|
|
|
|
~~~json
|
|
{
|
|
"output": {
|
|
"resultImage": {
|
|
"artifactId": "generated-id",
|
|
"format": "PNG",
|
|
"width": 1080,
|
|
"height": 720,
|
|
"bytes": 245000
|
|
}
|
|
}
|
|
}
|
|
~~~
|
|
|
|
结果只返回产物标识和基本元数据,不把图片字节放入普通任务日志。
|
|
|
|
## 4. 结果码
|
|
|
|
见[结果码总表](README.md#结果码总表)。SCREENSHOT 使用 `OK`、`UNSUPPORTED_ON_DEVICE`、`TARGET_NOT_FOUND`、`TARGET_AMBIGUOUS` 和 `ACTION_FAILED`(截图、裁剪、超限或保存失败)。
|
|
|
|
截图各阶段的失败是否需要拆成独立码,等实现时按排查需要决定。
|
|
|
|
## 5. 测试
|
|
|
|
单元测试覆盖 scope 校验、裁剪、大小限制和输出元数据。系统回调、不同 API、屏幕方向、FLAG_SECURE 和厂商差异需要真机验证。
|