26

在我的基于语音识别的应用程序中,我有时会收到 ERROR_RECOGNIZER_BUSY。直观地说,这需要... retries,对吗?

问题是这个错误是非常无证的,所以很明显我有一些问题,也许该领域更有经验的人能够回答:

  1. 是什么触发了这样的错误?它真的只有繁忙的服务器(在谷歌)吗?或者这也可能暗示我的应用程序中的错误?
  2. 我是否必须在重试之前明确关闭/重新打开会话?
  3. 多久重试一次?每1秒一次?每 5 秒?其他?

非常欢迎您的经验丰富的见解。谢谢。

4

4 回答 4

6

我不是 100% 确定这一点,但是自从您发布以来已经很长时间了,我不妨试一试。看来您在代码中做错了什么。正如评论者所说,如果您实际发布了返回此错误的代码,那将会很有帮助。但是,在此处找到的 Android 语音识别服务的源代码中:

http://source-android.frandroid.com/frameworks/base/core/java/android/speech/RecognitionService.java 我们有一个函数调用dispatchStopListening它似乎结束了监听过程。然而,在它真正结束之前,有一些非法状态的检查,包括:

else if (mCurrentCallback.mListener.asBinder() != listener.asBinder()) {
            listener.onError(SpeechRecognizer.ERROR_RECOGNIZER_BUSY);
            Log.w(TAG, "stopListening called by other caller than startListening - ignoring");
        }

这似乎意味着您试图通过其他人而不是您开始的人来结束侦听过程,这会引发此错误。我希望这会有所帮助,但如果您发布代码将非常有益。

于 2011-05-14T22:29:56.053 回答
1

只需将包添加到您的识别器意图中,它应该可以工作。这就是我所做的。

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
...
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.package.name");
于 2015-01-13T20:06:30.227 回答
0

当您已经在使用 SpeechRecognizer 对象时,通常会抛出 ERROR_RECOGNIZER_BUSY。(或者你没有正确关闭一个)。

于 2014-06-20T12:31:20.903 回答
0

ERROR_RECOGNIZER_BUSY 最可能的原因是您没有从主线程停止识别服务,并且忽略了抛出的错误。

于 2015-03-25T23:26:47.987 回答