RecognitionListener回调函数多次使用相同的错误代码调用onError。

4

我正在使用RecognitionListener接口实现语音识别。这个接口可以实现回调,例如:

public void onError(int error) {

}

除了一个主要问题,它运行得很好。onError的回调会多次使用相同的错误代码。例如ERROR_CLIENT或ERROR_NO_MATCH。我至少看到同一个方法被回调了两次相同的错误代码。
是什么导致了这个问题?还是Google语音识别API中的一个错误?

请提供有关您的代码的更多详细信息。 - intika
我正在使用RecognitionListener接口来实现语音识别的回调。 我打算在收到错误时重新启动语音识别。例如,当谷歌服务器无法理解或解释我说的话时,它通过调用onError方法(它属于RecognitionListener接口)抛出错误。当我通过Intent使用Recognizer对象激活监听器时,它会发出哔哔声,并且如果可以讲话,并且谷歌服务器能够理解和解释而不调用onError,则会进行语音识别。但是当我不讲话时,监听器将超时并多次调用onError方法。 - user1501382
你确定你没有注册两次监听器吗?setRecognitionListener(RecognitionListener listener) - Ketan Parmar
是的先生。我重新检查了代码,并实际上重写了它以确认。 - user1501382
2个回答

0
我找到的解决方案是在SpeechRecognizer上调用destroy。因此,如果您使用它,请记得在调用destroy后再次实例化对象。

整个销毁和重新构建对象的成本太高了。在我的情况下,我有一个绑定服务,其中包含SpeechRecognizer对象。我尝试忽略如果相同的错误代码出现多次的错误,然后它的工作效果要好得多。 - user1501382
那么,调用SpeechRecognizer上的stopListening怎么样?如果出现错误,例如ERROR_NETWORK,识别器可能会继续监听并一遍又一遍地将错误推送到您的监听器。您可以在一定时间后或网络服务再次可用时调用startListening。 - Peter

0
你确定你没有创建多个语音识别对象并为它们设置相同的接口吗?

是的先生,我只有一个对象。当我注意到这种行为时,这是我怀疑的第一件事。看起来唯一的解决办法就是让我想办法忽略它们。 - user1501382

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接