Question

Dans mon application basée reconnaissance vocale, je reçois parfois ERROR_RECOGNIZER_BUSY. Intuitivement, ce qui appelle à ... retries , droit?

Le problème est que cette erreur est très en situation irrégulière, donc évidemment j'ai des questions que peut-être quelqu'un de plus expérimenté dans le domaine est en mesure de répondre:

  1. Qu'est ce qui déclenche une telle erreur? est-ce vraiment que le serveur est occupé (à Google)? ou cela pourrait aussi faire allusion à un bug dans mon application?
  2. Dois-je fermer explicitement / rouvrir une session avant une nouvelle tentative?
  3. Combien de fois une nouvelle tentative? une fois tous les 1 seconde? toutes les 5 secondes? Autre?

Vos idées expérimentés sont les bienvenus. Merci.

Était-ce utile?

La solution

Je ne suis pas 100% sûr de cela, mais depuis qu'il a été si longtemps que je peux aussi bien donner depuis que vous avez publié, un coup de feu. Il semble que vous faites quelque chose de mal dans le code. Comme l'intervenant a déclaré que, il serait utile si vous avez réellement le code qui posté retourne cette erreur. Cependant, dans le code source pour le service de reconnaissance vocale Android trouvé ici:

http: // source Android. frandroid.com/frameworks/base/core/java/android/speech/RecognitionService.java nous avons une fonction appelée dispatchStopListening qui semble mettre fin au processus d'écoute. Cependant, avant qu'elle ne se termine réellement, il y a quelques contrôles pour les états illégaux, y compris ceci:

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

Cela semble impliquer que vous essayez de mettre fin au processus d'écoute par un autre type que vous avez commencé avec, ce qui soulève cette erreur. J'espère que cela aide, mais il serait extrêmement bénéfique si le code que vous avez publié.

Autres conseils

Ajoutez simplement le paquet à votre intention et il devrait reconnaisseur fonctionner. Voilà ce que je l'ai fait.

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

ERROR_RECOGNIZER_BUSY est souvent jeté lorsque vous êtes déjà en cours d'utilisation de l'objet SpeechRecognizer. (Ou vous ne fermaient pas un bien insérés).

La cause la plus probable de ERROR_RECOGNIZER_BUSY est que vous ne l'avez pas arrêté le service de reconnaissance du thread principal et l'erreur jetée a été ignorée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top