在调用startListening()之后,在Android上使用SpeechRecognizer.stopListening()时遇到问题。它似乎根本没有作用。继续处理音频,并返回识别结果,就像没有调用stopListening()一样。

还有其他人有类似的问题吗?我可以做错什么吗?

可能的提示:调用stopListening()之后,立即使用SpeechRecognizer.ERROR_CLIENT调用onError()。也许这意味着停止调用失败了?

无论是在检测到语音开始之前调用stopListening()还是在处理语音时,都会出现此问题。

startListening()和stopListening()均从主线程调用。

在至少两个不同的设备上使用Android 5和6进行了测试。

最佳答案

您的解释中的stopListening()表现正常。在此之前,此调用不会阻止识别器处理语音输入。

还可以预期它将使用onError()调用SpeechRecognizer.ERROR_CLIENT。如果您不希望将其视为“错误”,则在代码中调用stopListening()的位置添加一个简单的 bool 值:

deliberatelyCalledStop = true;

然后在错误处理内部,您将知道是否已将其作为预期结果抛出,您可以忽略它。

为了关闭识别服务并忽略到目前为止检测到的所有语音输入,您需要致电:
recognizer.cancel();
recognizer.destroy(); // if you want to destroy it

These methods将实现您想要的。

请注意,在撰写本文时,Google的识别服务存在一些相当大的错误。

我建议您阅读我的答案to this question,然后查看我已经报告的the gist of the bugs

10-07 19:09