不进入onReadyForSpeech()回调函数 再次调用就引擎忙错误,引擎在干什么
186*****162 发布于2015-11 浏览:1762 回复:3
0
收藏

离在线融合包语音识别开始后

speechRecognizer.startListening(intent);

一直无法进入onReadyForSpeech()回调函数,,并且当我再次调用

speechRecognizer.startListening(intent);开启时,就返回给我

case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:

sb.append("引擎忙");


这是为什么啊!已经被问题卡了一天了,求救



收藏
点赞
0
个赞
共3条回复 最后由用户已被禁言回复于2022-04
#4c5812回复于2016-08

楼上正解!


之所以报引擎忙,是因为上一次会话未结束。如:onResult或onError均未回调就再次开始调用startListening一定会引擎忙

0
#3hronyqqcom回复于2016-08

你可以看下startListening里面的源码,那是安卓系统的代码,不是百度写的,所以要优化你需要找出startListening方法里面为什么会出现消息冲突或者返回值错误问题,我个人经验是,因为这个里面写了些线程相关的事务,会出现锁和成员变量值被多次初始化问题,由于是系统源码我们是改不了的,只有满足系统需求的调用请求才能被正确执行,我想你可能是用的同一个意图调用startListening才会返回引擎忙,

private  int restartflag=-1;
private void restart(String erro) {
restartflag++;
Intent  intent=new Intent();
if (erro!=null&&erro.equals("引擎忙")) {
intent = new Intent("com.baidu.action.RECOGNIZE_SPEECH");
intent.putExtra("restartflag",restartflag );
}
speechRecognizer.startListening(intent);
}

在异常返回最后加上这段代码试试

0
#2ctfyhome回复于2016-03

识别引擎只能单任务工作,一次只能处理一个会话,会话的开始于startListening,结束于onResults/onError回调,再次期间再次调用startListening会反馈引擎忙

0
TOP
切换版块