讯飞汽车语音助理在其他外部应用唤醒

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yus201120/article/details/83751602

我们可以通过讯飞提供的外部唤醒适配功能,可以在不用唤醒语音关键词的情况下,监听我们所发出的语音命令。比如,我们用TTS播报一段消息,“规划前往北京鸟巢,是否前往?” ,这个时候语音其实是还没有通过唤醒词唤醒的,我们就需要通过外部唤醒适配功能,让语音去识别到我们的命令,是前往还是取消。实现此功能有以下几步:

  1. 添加custommvw.jar,并build path把jar包导入到library里;
  2. 实现接口ICustomMvwCallback,这个接口中定义了远程连接状态的回调、开启唤醒词监听的回调、唤醒词监听结果的回调。
ICustomMvwCallback customcallback = new ICustomMvwCallback() {
		
		@Override
		public void onWakeupResult(int nMvwId, int nMvwScore) {
			Log.i(TAG, "nMvwId:"+nMvwId);  //识别的回调接口
			Message msg = ServiceHandler.obtainMessage();
			msg.what = 0x12;
			msg.arg1 = nMvwId;
			ServiceHandler.sendMessage(msg);
		}
		
		@Override
		public void initMvwCallback(boolean state, int errId) {
			Log.i(TAG, "initMvwCallback :"+state + " ;errId:"+errId); //开启唤醒状态的接口
		}
		
		@Override
		public void initCallback(boolean state, int errId) {
			Log.i(TAG, "initCallback :"+state + " ;errId:"+errId);  //SDK远程服务连接的回调接口
			if(!state){
				mCustomMvwSession.initService();
			}
		}
	};
  1. 初始化CustomMvwSession,
if(mCustomMvwSession == null){
				mCustomMvwSession = CustomMvwSession.getInstance(getApplicationContext(), customcallback);
			}

在获取实例的时候,默认会调用一次initService(),如果后面的回调方法initCallback(boolean state, int errId)中,state为false的时候,表示远程连接有问题,需要重新调用initService()连接。

  1. 调用startForegroundMvw(java.util.List<java.lang.String> keywords,
    boolean needSpWords)或者startBackgroundMvw(java.util.List<java.lang.String> keywords,
    boolean needSpWords),开启自定义语音唤醒功能,其中的参数keywords表示自定义唤醒词组,定义这些词组传入SDK之后,一旦语音识别到其中的一个唤醒词,那么就会通过customcallback 中的onWakeupResult方法把该唤醒词在传入词组中的索引index回调回来,这样我们就可以获取到用户的命令了。调用上面的两个方法的时候,还要返回值的,
  • 需要注意的是,如果在调用了getInstance之后马上就调用startBackgroundMvw方法,会出现调用不成功的情况,返回值为REMOTE_EXCEPTION,因为这个时候远程的连接还没有完成。我们需要在getInstance并收到了initCallback为true的回调之后,方可以开始调用唤醒方法。

猜你喜欢

转载自blog.csdn.net/yus201120/article/details/83751602
今日推荐