Android的SpeechRecognizer stopListening()没有效果?

8

在Android上使用SpeechRecognizer.stopListening()时,我遇到了问题,在调用startListening()后。它似乎没有任何效果。声音继续被处理,并且返回识别结果,就好像没有调用stopListening()一样。

还有其他人遇到过类似的问题吗?我做错了些什么吗?

一个可能的线索:在调用stopListening()后立即调用onError(),并显示SpeechRecognizer.ERROR_CLIENT。也许这意味着停止调用失败了?

无论是在检测到语音开始之前还是在处理语音时,都会出现该问题。

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

在至少两个不同设备上测试过,包括Android 5和6。

1个回答

6
在您的解释中,stopListening() 的行为符合预期。该调用不会阻止识别器处理此时之前的语音输入。
同时,预计它将使用 SpeechRecognizer.ERROR_CLIENT 调用 onError()。如果您不希望将其视为“错误”,则在代码中调用 stopListening() 的位置添加一个简单的布尔值:
deliberatelyCalledStop = true;

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

为了关闭识别服务并忽略迄今为止检测到的所有语音输入,您需要调用:

recognizer.cancel();
recognizer.destroy(); // if you want to destroy it

这些方法可以实现你想要的。

请注意,目前存在一些与Google Recognition Service相关的严重问题。

我建议您阅读我的回答这个问题,然后查看我已经报告过的错误的主要内容


为什么在 stopListening() 时也预计会调用 onError() 并带有 SpeechRecognizer.ERROR_CLIENTcancel() 是否也适用相同情况? - WebViewer

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