2013-03-16 6 views
6

sto migliorando un'applicazione Android che utilizza classe RecognitionListener ad ascoltare la voce dell'utente, qui ottengo sotto i risultati:Come riavviare l'ascolto di nuovo dopo RecognitionListener prendere errore ERROR_RECOGNIZER_BUSY

1-) Se l'utente clicca sull'icona del microfono e disse qualcosa tutto va bene 2-) Se l'utente clicca sull'icona del microfono e fare nuovamente clic sull'icona del microfono o non ha detto niente, ottengo onerror e il tipo di errore è: ERROR_RECOGNIZER_BUSY

@Override 
public void onError(int error) { 
if ((error == SpeechRecognizer.ERROR_NO_MATCH) 
    || (error == SpeechRecognizer.ERROR_SPEECH_TIMEOUT)){ 

    } 
    else if(ERROR_RECOGNIZER_BUSY){ 
    } 

} 

Ecco il mio codice per la lista di partenza zare:

public void recognizeSpeechDirectly() 
    { 


     recognizer = SpeechRecognizer.createSpeechRecognizer(this.context); 
     recognizer.setRecognitionListener(this); 
     recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
     recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "org.twodee.andytest"); 
     recognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true); 
     recognizer.startListening(recognizerIntent); 

    } 

voglio riavviare l'ascolto quando appare ERROR_RECOGNIZER_BUSY,

Un altro ragazzo ha parlato di questo errore su StackOverflow, ma non è chiaro per me e non può attuarlo.

How to handle ERROR_RECOGNIZER_BUSY

Grazie in anticipo

risposta

0

Hai ERROR_RECOGNIZER_BUSY perché si chiama startListening due volte quando un utente fa clic sul pulsante e scatta di nuovo. Modificare il codice come segue:

// class member 
private boolean mIsListening; 
@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    ......... 
    recognizer = SpeechRecognizer.createSpeechRecognizer(this.context); 
    recognizer.setRecognitionListener(this); 
    recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "org.twodee.andytest"); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true); 
} 

E quando l'icona si fa clic

if (!mIslistening) 
{ 
    mIsListening = true;   
    recognizer.startListening(recognizerIntent); 
} 

@Override 
public void onError(int error) { 
if ((error == SpeechRecognizer.ERROR_NO_MATCH) 
    || (error == SpeechRecognizer.ERROR_SPEECH_TIMEOUT)){ 

    } 
    else if(ERROR_RECOGNIZER_BUSY){ 

    } 
    recognizer.startListening(recognizerIntent); 
} 

@Override 
    public void onPartialResults(Bundle partialResults) 
    { 
     mIsListening = false; 
     .......... 
    } 

@Override 
    public void onResults(Bundle results) 
    { 
     mIsListening = false; 
      .......... 
    } 
+1

Grazie per la risposta Hoan ma quando ho cancellato recongnizer e riavviare l'ascolto a ** se (ERROR_RECOGNIZER_BUSY) **, invece di riavviare l'ascolto lo stesso errore si ripete in loop infinito. – odincer

+0

Ho modificato la mia risposta. –

+0

Ciao Hoan, ho certamente applicato quello che hai detto ma non funziona per me, hai qualche campione di lavoro? La mia macchina è Samsung S3 con Android 4.1 tra l'altro. – odincer

0

avviare il riconoscimento con: recognizeSpeechDirectly();

public void stopRecognition(){ 
     recognizer.destroy(); 
     recognizer = null; 

} 

public void onError(int error) { 
     stopRecognition(); 
} 

public void onResults(Bundle results){ 
     //Do something 
     stopRecognition(); 
} 

Si lavora per risolvere "non collegato al servizio di riconoscimento" e "ERROR_RECOGNIZER_BUSY" errori

Problemi correlati