ScreenRecognitionController控制
版本变更
版本号 | 变更时间 | 变更描述 |
---|---|---|
1.0.0 | 2022-02-16 | SmartRecognitionState状态、InputTextAction指令、TapAction指令、SwipeAction事件、KeycodeControlAction事件 |
1.0.1 | 2022-02-28 | SmartRecognitionState状态新增foregroundApp字段,获取当前正在使用的app名称,云端bot会基于此做页面适配 |
1.0.2 | 2022-03-11 | 增加CommandExecuteResult事件上报 |
摘要
本接口描述了一套在可见即可说的场景下结合端设备指令实现的屏幕识别控制能力,根据下发的坐标值或者系统支持的keycode值实现指令的执行。该场景强依赖dialogRequestId,仅支持语音交互;在端上异步上传截屏时会基于dialogRequestId作为会话标识,同时,端上会基于dialogRequestId记录当前状态下设备所处的状态,如果指令下发时端上状态已发生变更,该指令将被丢弃;
SmartRecognitionState状态
launcher需要在本地保存是否『可见即可说』的功能状态,如果开关已打开,需要拉起SmartRecognition服务(APK)并上报SmartRecognitionState状态,云端基于此端状态来判断是否将请求打到screen recognition bot;
消息样例
"clientContext": [
{
"header": {
"namespace": "ai.dueros.device_interface.screen_recognition_controller",
"name": "SmartRecognitionState"
},
"payload": {
"status": {{BOOLEAN}},
"forgroundApp": {
"packageName" : "{{STRING}}",
"activityName" : "{{STRING}}",
"versionName" : "{{STRING}}",
"versionCode" : {{INT32}},
"appName" : "{{STRING}}"
}
}
}
]
Payload参数说明
- status
- 端上是否开启了『可见即可说』的功能
- (optional) foregroundApp
- 当前前台正在展示的app信息 注: 获取versionName,versionCode等信息时,端上会触发一次binder通信,建议端上实现时增加一些优化策略,减少binder通讯次数。
- foregroundApp.packageName
- 应用包名
- foregroundApp.activityName
- 当前页面名称
- foregroundApp.versionName
- 应用版本名称
- foregroundApp.versionCode
- 应用版本号
- foregroundApp.appName
- 展现名称
CommandExecuteResult事件
用于云方案场景时,端上执行指令的情况上报,这里特指ai.dueros.device_interface.screen_recognition_controller下的指令,如InputTextAction,TapAction等,只有执行成功时才需要上报。
消息样例
"event": {
"header": {
"namespace": "ai.dueros.device_interface.screen_recognition_controller",
"name": "CommandExecuteResult",
"messageId": "{{STRING}}",
"dialogRequestId": "{{STRING}}"
},
"payload": {
"isExecuted": {{BOOLEAN}},
"reason": "{{STRING}}",
"directives": ["{{ENUM}}"]
}
}
Payload参数说明
- isExecuted
- 指令是否执行成功 true or false
- (optional) reason
- 指令执行失败的原因,执行成功时无需返回
- (optional) directives
- 被执行的指令名称,这里特指ai.dueros.device_interface.screen_recognition_controller下的指令,如InputTextAction,TapAction;只有执行成功时才需要上报。
InputTextAction指令
通过语音对焦点所在的输入框直接输入文本信息,如果焦点不在输入框里,指令将被丢弃;
{
"header":{
"namespace" : "ai.dueros.device_interface.screen_recognition_controller",
"name":"InputTextAction",
"messageId": "{{STRING}}",
"dialogRequestId": "{{STRING}}"
},
"payload":{
"text": "{{STRING}}",
"display": "{{STRING}}"
}
}
Payload参数说明
- text
- 输入的文本内容;
- display
- 在执行指令时,同步到屏幕上的显示内容,应用层可基于此字段提供用户提示,已确定用户能够感知到指令的执行;
TapAction指令
点击指令(包括单击、双击、长按),端上执行时需要基于给定的区域范围找到中心点坐标执行点击触发操作;
{
"header":{
"namespace" : "ai.dueros.device_interface.screen_recognition_controller",
"name":"TapAction",
"messageId": "{{STRING}}",
"dialogRequestId": "{{STRING}}"
},
"payload":{
"location": {
"top": {{INT}},
"left": {{INT}},
"width": {{INT}},
"height": {{INT}}
},
"doubleTap": {{BOOLEAN}},
"longClick":{{BOOLEAN}},
"display": "{{STRING}}"
}
}
Payload参数说明
- location
- 可点击的坐标范围,以下值都是屏幕的绝对值
- location.top
- 范围起始顶点值
- location.left
- 范围起始左侧值
- location.width
- 宽度
- location.height
- 高度
- (optional) doubleTap
- 描述当前事件是否为双击事件;true表示 双击事件,false表示单击事件;
- (optional) longClick
- 描述当前事件是否为长按事件;true表示 长按事件,false表示单击事件;
- display
- 在执行指令时,同步到屏幕上的显示内容,应用层可基于此字段提供用户提示,已确定用户能够感知到指令的执行;
SwipeAction指令
滑动指令(左滑、右滑、上滑、下滑),滑动指令会下发一定的区间范围,端上会基于该区间范围内设置滑动起始点和终止点坐标;
{
"header":{
"namespace" : "ai.dueros.device_interface.screen_recognition_controller",
"name":"SwipeAction",
"messageId": "{{STRING}}",
"dialogRequestId": "{{STRING}}"
},
"payload":{
"location": {
"top": {{INT}},
"left": {{INT}},
"width": {{INT}},
"height": {{INT}}
},
"duration": {{INT64}},
"from" :{{CoordinateStructrue}},
"to": {{CoordinateStructrue}},
"display": "{{STRING}}"
}
}
Payload参数说明
- location
- 响应热区的坐标范围,以下值都是屏幕的绝对值
- location.top
- 范围起始顶点值
- location.left
- 范围起始左侧值
- location.width
- 宽度
- location.height
- 高度
- duration
- 时间间隔 毫秒级,最大不超过500ms;默认建议值200ms;时间间隔和滑动长度有关,可自行基于效果调节;
- from
- 起始坐标点
- to
- 终止坐标点
- display
- 在执行指令时,同步到屏幕上的显示内容,应用层可基于此字段提供用户提示,已确定用户能够感知到指令的执行;
CoordinateStructrue坐标结构体
{
"x":{{INT}},
"y":{{INT}}
}
- x
- 水平坐标值
- y
- 垂直坐标值
KeycodeControlAction指令
keycode控制指令
{
"header":{
"namespace" : "ai.dueros.device_interface.screen_recognition_controller",
"name":"KeycodeControlAction",
"messageId": "{{STRING}}",
"dialogRequestId": "{{STRING}}"
},
"payload":{
"keycode": {{INT}},
"display": "{{STRING}}"
}
}
Payload参数说明
- keycode
- keycode的值
- display
- 在执行指令时,同步到屏幕上的显示内容,应用层可基于此字段提供用户提示,已确定用户能够感知到指令的执行;
以Android系统提供的标准对照表为例,具体可支持的keycode如下表
基本
KeyCode | Description | Value | Scene |
---|---|---|---|
KEYCODE_0 | 按键'0' | 7 | TOUCH/TV |
KEYCODE_1 | 按键'1' | 8 | TOUCH/TV |
KEYCODE_2 | 按键'2' | 9 | TOUCH/TV |
KEYCODE_3 | 按键'3' | 10 | TOUCH/TV |
KEYCODE_4 | 按键'4' | 11 | TOUCH/TV |
KEYCODE_5 | 按键'5' | 12 | TOUCH/TV |
KEYCODE_6 | 按键'6' | 13 | TOUCH/TV |
KEYCODE_7 | 按键'7' | 14 | TOUCH/TV |
KEYCODE_8 | 按键'8' | 15 | TOUCH/TV |
KEYCODE_9 | 按键'9' | 16 | TOUCH/TV |
KEYCODE_A | 按键'A' | 29 | TOUCH/TV |
KEYCODE_B | 按键'B' | 30 | TOUCH/TV |
KEYCODE_C | 按键'C' | 31 | TOUCH/TV |
KEYCODE_D | 按键'D' | 32 | TOUCH/TV |
KEYCODE_E | 按键'E' | 33 | TOUCH/TV |
KEYCODE_F | 按键'F' | 34 | TOUCH/TV |
KEYCODE_G | 按键'G' | 35 | TOUCH/TV |
KEYCODE_H | 按键'H' | 36 | TOUCH/TV |
KEYCODE_I | 按键'I' | 37 | TOUCH/TV |
KEYCODE_J | 按键'J' | 38 | TOUCH/TV |
KEYCODE_K | 按键'K' | 39 | TOUCH/TV |
KEYCODE_L | 按键'L' | 40 | TOUCH/TV |
KEYCODE_M | 按键'M' | 41 | TOUCH/TV |
KEYCODE_N | 按键'N' | 42 | TOUCH/TV |
KEYCODE_O | 按键'O' | 43 | TOUCH/TV |
KEYCODE_P | 按键'P' | 44 | TOUCH/TV |
KEYCODE_Q | 按键'Q' | 45 | TOUCH/TV |
KEYCODE_R | 按键'R' | 46 | TOUCH/TV |
KEYCODE_S | 按键'S' | 47 | TOUCH/TV |
KEYCODE_T | 按键'T' | 48 | TOUCH/TV |
KEYCODE_U | 按键'U' | 49 | TOUCH/TV |
KEYCODE_V | 按键'V' | 50 | TOUCH/TV |
KEYCODE_W | 按键'W' | 51 | TOUCH/TV |
KEYCODE_X | 按键'X' | 52 | TOUCH/TV |
KEYCODE_Y | 按键'Y' | 53 | TOUCH/TV |
KEYCODE_Z | 按键'Z' | 54 | TOUCH/TV |
符号类
KeyCode | Description | Value | Scene |
---|---|---|---|
KEYCODE_PLUS | 按键'+' | 81 | TOUCH/TV |
KEYCODE_MINUS | 按键'-' | 69 | TOUCH/TV |
KEYCODE_STAR | 按键'*' | 17 | TOUCH/TV |
KEYCODE_SLASH | 按键'/' | 76 | TOUCH/TV |
KEYCODE_EQUALS | 按键'=' | 70 | TOUCH/TV |
KEYCODE_AT | 按键'@' | 77 | TOUCH/TV |
KEYCODE_POUND | 按键'#' | 18 | TOUCH/TV |
KEYCODE_APOSTROPHE | 按键''' (单引号) | 75 | TOUCH/TV |
KEYCODE_BACKSLASH | 按键'\' | 73 | TOUCH/TV |
KEYCODE_COMMA | 按键',' | 55 | TOUCH/TV |
KEYCODE_PERIOD | 按键'.' | 56 | TOUCH/TV |
KEYCODE_LEFT_BRACKET | 按键'[' | 71 | TOUCH/TV |
KEYCODE_RIGHT_BRACKET | 按键']' | 72 | TOUCH/TV |
KEYCODE_SEMICOLON | 按键';' | 74 | TOUCH/TV |
KEYCODE_GRAVE | 按键'`' | 68 | TOUCH/TV |
KEYCODE_SPACE | 空格键 | 62 | TOUCH/TV |
控制类
KeyCode | description | Value | Scene |
---|---|---|---|
KEYCODE_ENTER | 回车键 | 66 | TOUCH/TV |
KEYCODE_DPAD_CENTER | 导航键确定键 | 23 | TOUCH/TV |
KEYCODE_DPAD_UP | 导航键 向上 | 19 | TOUCH/TV |
KEYCODE_DPAD_DOWN | 导航键 向下 | 20 | TOUCH/TV |
KEYCODE_DPAD_LEFT | 导航键 向左 | 21 | TOUCH/TV |
KEYCODE_DPAD_RIGHT | 导航键 向右 | 22 | TOUCH/TV |
KEYCODE_MOVE_HOME | 光标移动到开始键 | 122 | TOUCH/TV |
KEYCODE_MOVE_END | 光标移动到末尾键 | 123 | TOUCH/TV |
KEYCODE_PAGE_UP | 向上翻页键 | 92 | TV |
KEYCODE_PAGE_DOWN | 向下翻页键 | 93 | TV |
KEYCODE_DEL | 退格键 | 67 | TOUCH/TV |
KEYCODE_FORWARD_DEL | 删除键 | 112 | TOUCH/TV |
KEYCODE_INSERT | 插入键 | 124 | TOUCH/TV |
KEYCODE_TAB | Tab键 | 61 | TOUCH/TV |
KEYCODE_NUM_LOCK | 小键盘锁 | 143 | TOUCH/TV |
KEYCODE_CAPS_LOCK | 大写锁定键 | 115 | TOUCH/TV |
KEYCODE_BREAK | Break/Pause键 | 121 | TOUCH/TV |
KEYCODE_SCROLL_LOCK | 滚动锁定键 | 116 | TOUCH/TV |
KEYCODE_ZOOM_IN | 放大键 | 168 | TOUCH |
KEYCODE_ZOOM_OUT | 缩小键 | 169 | TOUCH |
KEYCODE_TV_INPUT | 按键TV input | 178 | TV |
KEYCODE_TV_POWER | 按键TV power | 177 | TV |
KEYCODE_TV_CONTENTS_MENU | 按键TV menu | 256 | TV |
KEYCODE_HOME | home按键 | 3 | TOUCH/TV |
KEYCODE_BACK | back键 | 4 | TOUCH/TV |
KEYCODE_MENU | menu键 | 82 | TOUCH/TV |
媒体控制类(暂未用到,可扩展到车机场景)
KeyCode | Description | Value | Scene |
---|---|---|---|
KEYCODE_MEDIA_PLAY | 多媒体键 播放 | 126 | -- |
KEYCODE_MEDIA_STOP | 多媒体键 停止 | 86 | -- |
KEYCODE_MEDIA_PAUSE | 多媒体键 暂停 | 127 | -- |
KEYCODE_MEDIA_PLAY_PAUSE | 多媒体键 播放/暂停 | 85 | -- |
KEYCODE_MEDIA_FAST_FORWARD | 多媒体键 快进 | 90 | -- |
KEYCODE_MEDIA_REWIND | 多媒体键 快退 | 89 | -- |
KEYCODE_MEDIA_NEXT | 多媒体键 下一首 | 87 | -- |
KEYCODE_MEDIA_PREVIOUS | 多媒体键 上一首 | 88 | -- |
KEYCODE_MEDIA_CLOSE | 多媒体键 关闭 | 128 | -- |
KEYCODE_MEDIA_EJECT | 多媒体键 弹出 | 129 | -- |
KEYCODE_MEDIA_RECORD | 多媒体键 录音 | 130 | -- |