# 交互理解

AIUI的交互类似一个IO系统,I(Input)就是发送给AIUI的AIUIMessage, O(Output)就是AIUI抛出来的AIUIEvent。开发者通过集成AIUI SDK, 发送AIUIMessage、接收AIUIEvent。

AIUIServiceKit中提供的AIUIAgent就是和AIUIService交互的桥梁,通过发送不同的AIUIMessage控制AIUI的运行, AIUI通过AIUIListener将不同的AIUIEvent抛出来给开发者进行解析。

# 接口说明

AIUIAgent

AIUIServiceKit中用于与AIUIService交互的接口类为AIUIAgentAIUIAgent提供如下接口:

//创建AIUIAgent实例
static void createAgent(Context context, AIUIListener listener)

//发送AIUI消息
void sendMessage(AIUIMessage message)

//销毁AIUIAgent实例
void destroy()

AIUIListener

创建AIUIAgent时传递的参数AIUIListener是用于接收AIUIService抛出事件的监听器。AIUIListener定义如下:

interface AIUIListener
{
    void onEvent(AIUIEvent event);
}

AIUIEvent

AIUIListener中监听的抛出事件是AIUIEventAIUIEvent定义如下:

class AIUIEvent
{
    int eventType; //事件类型
    int arg1;      //参数1
    int arg2;      //参数2
    String info;
    Bundle data;
}

AIUI定义了多种AIUIEvent,有不同eventType。当AIUIEvent取不同的eventType时,其余字段有不同的定义,详细定义请见AIUIEvent的定义说明。

AIUIMessage

AIUIAgent中sendMessage方法用于向AIUIService发送AIUI消息。消息类型是AIUIMessage

AIUIMessage定义如下:

class AIUIMessage
{
    int msgType;   //消息类型
    int arg1;      //参数1 默认空值 0
    int arg2;      //参数2 默认空值0
    String params; //默认空值 ""
    byte[] data;   //默认空值 null
}

AIUI定义了多种AIUIMessage,有不同的msgType。当AIUIMessage取不同的msgType时,其他成员有不同的定义,详细定义解释请见AIUIMessage的定义说明。

# 调用流程

AIUIServiceKit的一般调用流程如下:

AIUIListener listener = new AIUIListener() {
        @Override
        public void onEvent(AIUIEvent event) {
            switch (event.eventType) {
                //唤醒事件
                case AIUIConstant.EVENT_WAKEUP:
                {
                        break;
                }
                //结果事件(包含听写,语义,离线语法结果,定义和解析格式参见4.6 AIUIEvent一节)
                case AIUIConstant.EVENT_RESULT:
                {
                        break;
                }
                //休眠事件
                case AIUIConstant.EVENT_SLEEP:
                {
                        break;
                }
                //错误事件
                case AIUIConstant.EVENT_ERROR:
                {
                        break;
                }
        }
}

AIUIAgent agent = AIUIAgent.createAgent(MainActivity.this, listener);
agent.sendMessage(new AIUIMessage(AIUIConstant.CMD_RESET_WAKEUP, 0, 0, null, null);

具体的实现编码可以参考开发包中的AIUIDemo源码实现。