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 --