2011-04-27 19 views
22

在我的基於語音識別的應用程序中,我有時會收到ERROR_RECOGNIZER_BUSY。直觀地說,這需要... 重試,對吧?如何處理ERROR_RECOGNIZER_BUSY

的問題是,這個錯誤是非常無證,所以很明顯,我有疑問,也許有人在該領域更有經驗,能夠回答:

  1. 什麼引發了這樣的錯誤?是否 真的只有繁忙的服務器(在谷歌)? 或者這也可以暗示我的應用程序中的錯誤?
  2. 我必須在重試之前明確地關閉/重新打開 會話嗎?
  3. 重試次數?每 1秒?每5秒鐘?其他?

我們非常歡迎您提供有經驗的見解。謝謝。

+1

你可以發表你正在用來與SpeechRecognizer交互的代碼嗎? – 2011-05-03 18:51:46

回答

4

我不是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"); 
     } 

這似乎意味着,你正在試圖通過一些其他人結束聽的過程比你開始吧,這引發了這個錯誤。 我希望這可以幫助,但如果您發佈代碼,這將非常有益。

0

當您已經在使用SpeechRecognizer對象時,經常會引發ERROR_RECOGNIZER_BUSY。 (或者你沒有完全關閉)。

0

只需將包添加到您的識別器意圖,它應該工作。這就是我所做的。

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
... 
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.package.name"); 
0

最有可能的原因是ERROR_RECOGNIZER_BUSY你還沒有從主線程停止識別服務和拋出的錯誤被忽略了。