### 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結合對音樂播放模塊進行播放控制和視圖交互。如下圖所示:
