### 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结合对音乐播放模块进行播放控制和视图交互。如下图所示:
![](https://box.kancloud.cn/841ef7c50370a707cc9a8448f9b908d8_355x714.png)