2.4关键类说明

### AssistantService * * * * * 该Service是APP常驻后台的调度中心,用于初始化资源,执行各项控制指令。开发者可以发送AssistantService.ServiceCmd中定义的各种控制指令 ~~~ public interface ServiceCmd { /** * 语音设置部分 **/ int START_RECOGNIZE = 1; int STOP_RECOGNIZE = 2; int STOP_WAKEUP_LISTEN = 3; //仅关闭唤醒,不记录 int START_WAKEUP_MODE = 4; //开启唤醒模式,并记录 int CLOSE_WAKEUP_MODE = 5; //关闭唤醒模式,并记录 int STOP_VOICE_MODE = 16; //关闭语音模块(关闭识别、合成、唤醒) int HEADSET_RECOGNIZE = 18; int GET_HOOK = 19; /** * 音乐播放部分 **/ int PAUSE_PLAY = 6; //录音时停止播放 int PLAY_IN_BACKGROUND = 7; int TOGGLE_PLAY = 8; //暂停、播放 int NEXT_MUSIC = 9; //下一首 int CLOSE_PLAY_NOTIFICATION = 10; //关闭通知栏 int SEND_TO_ROBOT_FOR_END_TASK = 11; int SEND_TO_ROBOT = 12; //发送文本给robot ... } ~~~ 给该Service,而Service可以在 ~~~ public int onStartCommand(Intent intent, int flags, int startId){...} ~~~ 接收,提取Intent中携带的指令和信息并执行对应指令操作。同时,该Service还注册了以下几种广播接收者: ~~~ netWorkChangeReceiver:网络变化广播接收者 scrennReceiver:屏幕变化广播接收者 headSetInReceiver:耳机插拔广播接收者 blueConnectStateBroadcastReceiver:蓝牙设置连接状态广播接收者 smsReceiver:短信接收广播接收者 ~~~ 开发者可以根据需求在这些接收者中进行某些业务逻辑处理。 ### MainActivity * * * * * 这是APP的主界面,其中嵌套了多个fragment子页面。其中包括: ~~~ GuideFragment:用户引导页(安装后第一次打开应用时出现) IntroduceFragment:快速入门页(展示应用支持的对话场景并提供了相关例句) PlayerHeaderFragment:头部音乐播放栏 PlayerListPagerFragment:歌曲列表页 ChatListFragment:聊天列表页 VoiceInputFragment:底部语音输入栏 ~~~ 其布局结构采用了DrawerLayout+Toolbar+NavigationView,因此可以通过响应侧边栏的点击事件进入相关功能模块页面。 ~~~ /* 设置侧边栏item点击监听 */ mNvLeftMenu.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { ... }); ~~~ ### ChatListFragment,ChatListAdapter * * * * * 由于需要进行多种场景的对话交互,所以ChatListFragment主要用于接收不同场景类型Processor发送过来的事件并提取回复信息进行展示。 ~~~ /** 接收聊天信息事件 */ public void addMessage(ChatMsgEvent msg){...} /** 接收语音合成动画事件 */ public void onSynthesizeEvent(SynthesizeEvent event){...} /** 接收闹钟状态变化事件 */ public void onAlarmSwitchEvent(AlarmStateEvent e){...} /** 接收拨号、发短信倒计时事件 */ public void onSeekBarUpdateEvent(UpdateWaittingSeekBarEvent e){...} /** 接收无限时录音结果事件 */ public void onLongRecordEvent(LongRecognizeEvent e){...} /** 接收刷新任务卡事件 */ public void refreshTaskCard(UpdateTaskCardEvent e){...} ~~~ 而ChatListAdapter则是聊天列表RecylerView的数据适配器,包含了以下几种视图类型: ~~~ /** 用户输入文本视图 */ private static final int REQ_VIEW = 0; /** 机器人回复文本视图 */ private static final int RESP_VIEW = 1; /** 提醒卡片视图 */ private static final int REMIND_CARD_VIEW = 2; /** 备忘卡片视图 */ private static final int MEMO_CARD_VIEW = 7; /** 闹钟卡片 */ private static final int ALARM_CARD_VIEW = 8; /** 账单卡片 */ private static final int ACCOUNTING_CARD_VIEW = 9; /** 电话短信视图 */ private static final int CALL_AND_SMS_VIEW = 10; /** 系统提示视图 */ private static final int SYS_TIPS_VIEW = 3; /** 备忘添加模式视图 */ private static final int MEMO_APPEND_VIEW = 4; /** 任务记录列表视图 */ private static final int CARD_LIST_VIEW = 5; /** 空视图,修正列表位置 */ private static final int EMPTY_VIEW = 6; /** 专辑列表视图 */ private static final int TING_ALBUM_VIEW = 11; /** 播放专辑视图 */ private static final int TING_PLAY_VIEW = 12; ~~~ 负责显示相应类型的视图,以及视图中的按键交互。 ### VoiceMediator * * * * * 包含语音识别、合成、唤醒的语音控制器。主要包含了识别、合成过程的回调以及识别、唤醒的开关和合成的关闭等语音控制方法。 ~~~ /** 无限时识别结果回调,该模式下不需要将识别文本作为对话发送给robot */ public void onLongRecoginzeResult(String) /** 识别开始回调 */ public void onRecoginzeBegin() /** 识别时声音变化回调 */ public void onRecoginzeVolumeChanged(int) /** 识别结果回调 */ public void onRecoginzeResult(String) /** 识别出错回调 */ public void onRecognizeError(int, String) /** 合成初始化回调 */ public void onSynthesizerInited(int) /** 合成出错回调 */ public void onSynthesizerError(String) /** 识别开关 */ public void startRecognize() public voidstopRecognize() /** 进入/退出唤醒模式 */ public void setWakeUpMode(boolean flag) /** 打开唤醒 */ public void startWakeup() /** 停止唤醒 */ public void stopWakenup() /** 合成关闭 */ public void stopSynthesize() ~~~ ### LingjuAudioPlayer * * * * * 音频播放控制器,与PlayerHeaderFragment、PlayerListPagerFragment结合对音乐播放模块进行播放控制和视图交互。如下图所示: ![](images/screenshot_1499134230149.png)