数据注入
输入与输出不同,所有的输入都需要使用InjectData接口进行数据注入。该数据开发者通过InjectData注入到服务端,并通过VmiCmdTouch枚举中的SEND_TOUCH_EVENT、SEND_KEY_EVENT命令字指定。示例如下:
VmiDataType module = TOUCH; VmiCmd cmd = SEND_TOUCH_EVENT; VmiTouchInputData touchData; uint8_t* data = &touchData; InjectData(module, cmd, data, sizeof(VmiTouchInputData)); VmiDataType module = TOUCH; VmiCmd cmd = SEND_KEY_EVENT; VmiKeyInputData keyData; uint8_t* data = &keyData; InjectData(module, cmd, data, sizeof(VmiKeyInputData));

服务端会处理 ACTION_DOWN, ACTION_POINTER_DOWN, ACTION_UP, ACTION_POINTER_UP, ACTION_MOVE 和 ACTION_CANCEL 事件。当服务端接收到 ACTION_CANCEL 事件时,会释放所有的触点;当服务端接收到 ACTION_DOWN 事件时,会先释放所有的触点,然后在注入 ACTION_DOWN 事件。服务端没有处理 ACTION_OUTSIDE 事件,因为当用户点击视频流客户端 view 外的屏幕时才会收到 ACTION_OUTSIDE 事件(注意这里不是从 view 内滑动到 view 外),这里的数据时无效的,不需要向服务端发送该数据。

当用户从视频流客户端 view 里面滑动到 view 外面,然后再抬起时,客户端会向服务端发送 UP 事件,但由于坐标不在视频流客户端 view 范围内,服务端会拦截并丢弃该数据,导致触点未释放。开发人员需要处理这种情况,推荐方法是将不在视频流客户端 view 内的坐标设置为视频流客户端 view 的边界值。
父主题: 触控输入开发