web-dev-qa-db-fra.com

La reconnaissance vocale arrête d'écouter après quelques secondes

J'ai beaucoup essayé mais je ne peux pas le découvrir, alors j'espère que vous pourrez m'aider.

J'essaie de créer ma propre application de reconnaissance vocale, qui n'affiche pas la boîte de dialogue.

J'ai déjà écrit du code et cela fonctionne très bien, mais mon problème est que le module de reconnaissance semble s'arrêter sans aucune erreur ou autre message dans LogCat.

Un fait étrange est que "onRmsChanged" de l'interface "RecognitionListener" est toujours appelé tout le temps, mais "onBeginningOfSpeech" n'est plus appelé.

Si je parle juste après le début de la reconnaissance vocale, cela fonctionne. Mais ce n'est pas le cas si j'attends quelques secondes.

L'API utilisée est 4.0.3 et je l'ai installée sur mon Nexus 7 avec la version 4.2.1

J'apprécierais vraiment si vous avez de bonnes idées.

Quelques extraits de code:

Ma classe:

class SpeechListener implements RecognitionListener
{

    public void onBeginningOfSpeech() 
    {
        Log.d(TAG, "onBeginningOfSpeech()");            
    }

    public void onBufferReceived(byte[] buffer) 
    {
        Log.d(TAG, "onBufferReceived()");
    }

    public void onEndOfSpeech() 
    {
        Log.d(TAG, "onEndOfSpeech()");

    }

    public void onError(int error) 
    {
        Log.d(TAG, "onError(): " + error);

        if(error == SpeechRecognizer.ERROR_NO_MATCH)
        {

        }
        else if(error == SpeechRecognizer.ERROR_SPEECH_TIMEOUT)
        {

        }
        else
        {
            tvOutput.setText("Error: " + error);    
        }

    }

    public void onEvent(int eventType, Bundle params) 
    {
        Log.d(TAG, "onEvent()");
    }

    public void onPartialResults(Bundle partialResults) 
    {
        Log.d(TAG, "onPartialResults()");
    }

    public void onReadyForSpeech(Bundle params) 
    {
        Log.d(TAG, "onReadyForSpeech()");
    }

    public void onResults(Bundle results) 
    {
        Log.d(TAG, "onResults(): " + results);

        String str = new String();

        ArrayList<String> data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);

        for(int i = 0; i < data.size(); i++)
        {
            str += data.get(i) + "\n";

        }           
        tvOutput.setText(tvOutput.getText().toString() + "\n\n" + "Results: " + str);           

    }
    public void onRmsChanged(float rmsdB) 
    {
        Log.d(TAG, "onRmsChanged()");
    }

}

Et ma mise en œuvre dans la MainActivity:

    this.srSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
    this.srSpeechRecognizer.setRecognitionListener(new SpeechListener());

    this.iSpeechIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    this.iSpeechIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    this.iSpeechIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "voice.recognition.test");      
    this.iSpeechIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 10);

Et donc ça a commencé:

srSpeechRecognizer.startListening(iSpeechIntent);

Journaux avec parler:

    12-16 13:50:53.576: D/DreamManagerService(485): Dream finished:   Android.os.Binder@415bbf38
    12-16 13:50:53.576: I/DreamManagerService(485): Leaving dreamland.
    12-16 13:50:53.576: I/DreamController(485): Stopping dream: name=ComponentInfo{com.google.Android.deskclock/com.Android.deskclock.Screensaver}, isTest=false, userId=0
    12-16 13:50:53.586: I/PowerManagerService(485): Waking up from dream...
    12-16 13:50:53.616: I/ActivityManager(485): No longer want com.google.Android.gsf.login (pid 13171): empty #17
    12-16 13:50:56.796: I/GoogleRecognitionServiceImpl(1461): #startListening [de-DE]
    12-16 13:50:56.806: I/ActivityManager(485): Start proc com.google.Android.gsf.login for service com.google.Android.gsf.login/com.google.Android.gsf.loginservice.GoogleLoginService: pid=13343 uid=10019 gids={50019, 3003, 1007, 1028, 1015, 2001, 3006}
    12-16 13:50:56.866: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:56.886: D/dalvikvm(1461): GC_FOR_ALLOC freed 516K, 12% free 8706K/9892K, paused 18ms, total 18ms
    12-16 13:50:56.906: D/dalvikvm(1461): GC_CONCURRENT freed 160K, 9% free 9015K/9892K, paused 3ms+2ms, total 21ms
    12-16 13:50:56.906: I/AudioService(485):  AudioFocus  requestAudioFocus() from Android.media.AudioManager@4135e960com.google.Android.speech.audio.AudioController$1@41261910
    12-16 13:50:56.916: I/VS.G3EngineManager(1461): create_rm: m=ENDPOINTER_VOICESEARCH,l=en-US
    12-16 13:50:56.916: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:56.916: I/VS.G3EngineManager(1461): Brought up new g3 instance :/system/usr/srec/en-US/endpointer_voicesearch.config for: en-USin: 3 ms
    12-16 13:50:56.926: I/ConnectionFactoryImpl(1461): Opening SSL connection: vs.google.com:14259
    12-16 13:50:56.966: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.016: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.066: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.116: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.166: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.216: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.266: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.316: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.366: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.416: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.466: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.516: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.566: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.616: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.666: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.716: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.766: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.816: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.866: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.916: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:57.966: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.016: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.066: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.116: I/MainActivity/SpeechListener(13268): onBeginningOfSpeech()
    12-16 13:50:58.126: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.176: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.226: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.276: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.326: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.376: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.426: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.476: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.526: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.576: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.626: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.676: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.726: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.776: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.826: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.876: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.926: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:58.976: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.026: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.076: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.126: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.176: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.236: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.286: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.336: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.386: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.436: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.486: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.536: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.586: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.636: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.646: I/MicrophoneInputStream(1461): mic_close
    12-16 13:50:59.666: I/AudioService(485):  AudioFocus  abandonAudioFocus() from         Android.media.AudioManager@4135e960com.google.Android.speech.audio.AudioController$1@41261910
    12-16 13:50:59.666: D/dalvikvm(1461): threadid=37: thread exiting, not yet detached (count=0)
    12-16 13:50:59.666: I/MainActivity/SpeechListener(13268): onEndOfSpeech()
    12-16 13:50:59.676: I/decoder(1461): INFO: recognition time wall: 2.732 sec user: 0.54 sec sys: 0.08 sec 
    12-16 13:50:59.686: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.736: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.786: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.826: I/MainActivity/SpeechListener(13268): onResults(): Bundle[mParcelledData.dataSize=292]
    12-16 13:50:59.836: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.886: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.936: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:50:59.986: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:51:00.046: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:51:00.096: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:51:00.146: D/MainActivity/SpeechListener(13268): onRmsChanged()
    12-16 13:51:00.196: D/MainActivity/SpeechListener(13268): onRmsChanged()

Se connecte sans parler:

    12-16 13:53:39.246: I/GoogleRecognitionServiceImpl(1461): #startListening [de-DE]
    12-16 13:53:39.296: D/dalvikvm(1461): GC_FOR_ALLOC freed 567K, 12% free 8708K/9892K, paused 21ms, total 21ms
    12-16 13:53:39.316: D/dalvikvm(1461): GC_CONCURRENT freed 164K, 9% free 9017K/9892K, paused 3ms+2ms, total 21ms
    12-16 13:53:39.316: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:39.316: I/AudioService(485):  AudioFocus  requestAudioFocus() from         Android.media.AudioManager@4135e960com.google.Android.speech.audio.AudioController$1@41261910
    12-16 13:53:39.326: I/VS.G3EngineManager(1461): create_rm: m=ENDPOINTER_VOICESEARCH,l=en-US
    12-16 13:53:39.326: I/ConnectionFactoryImpl(1461): Opening SSL connection: vs.google.com:14259
    12-16 13:53:39.326: I/VS.G3EngineManager(1461): Brought up new g3 instance :/system/usr/srec/en-US/endpointer_voicesearch.config for: en-USin: 5 ms
    12-16 13:53:39.366: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:39.416: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:39.466: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:39.516: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:39.576: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:39.626: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:39.676: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:39.726: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:39.776: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:39.826: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:39.876: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:39.926: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:39.976: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.026: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.076: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.136: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.176: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.226: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.286: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.336: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.386: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.436: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.486: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.536: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.586: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.636: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.686: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.736: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.786: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.836: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.886: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.936: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:40.986: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.046: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.096: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.146: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.196: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.246: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.296: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.346: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.396: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.446: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.496: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.546: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.596: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.646: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.696: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.746: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.796: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.846: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.896: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.946: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:41.996: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.046: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.096: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.146: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.196: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.246: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.296: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.356: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.406: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.456: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.506: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.556: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.606: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.656: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.706: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.756: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.806: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.856: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.906: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:42.956: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.006: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.056: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.116: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.156: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.216: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.266: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.316: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.366: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.416: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.466: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.516: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.566: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.616: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.666: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.716: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.766: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.816: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.866: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.916: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:43.966: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.016: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.066: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.116: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.166: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.226: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.276: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.326: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.376: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.426: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.476: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.526: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.576: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.626: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.676: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.726: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.776: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.826: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.876: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.926: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:44.976: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.026: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.076: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.126: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.176: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.226: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.276: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.326: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.376: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.426: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.476: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.526: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.576: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.636: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.676: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.736: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.786: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.836: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.886: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.936: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:45.986: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.036: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.086: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.136: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.186: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.236: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.286: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.336: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.386: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.436: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.486: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.536: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.596: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.636: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.696: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.746: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.796: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.846: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.896: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.946: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:46.996: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.046: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.096: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.146: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.196: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.246: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.296: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.346: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.396: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.446: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.496: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.556: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.596: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.656: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.696: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.746: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.796: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.856: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.906: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:47.956: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.006: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.056: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.106: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.156: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.206: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.256: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.306: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.356: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.406: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.456: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.506: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.556: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.616: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.656: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.706: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.766: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.816: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.866: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.916: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:48.966: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.016: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.066: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.116: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.166: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.216: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.266: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.316: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.366: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.416: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.466: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.516: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.566: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.616: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.666: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.716: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.776: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.816: D/dalvikvm(1461): GC_FOR_ALLOC freed 106K, 9% free 9025K/9892K,         paused 32ms, total 32ms
    12-16 13:53:49.816: I/dalvikvm-heap(1461): Grow heap (frag case) to 9.282MB for 320656-byte allocation
    12-16 13:53:49.836: D/dalvikvm(1461): GC_FOR_ALLOC freed 156K, 11% free 9182K/10208K, paused 19ms, total 19ms
    12-16 13:53:49.836: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.886: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.936: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:49.986: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:50.036: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:50.086: D/MainActivity/SpeechListener(13441): onRmsChanged()
    12-16 13:53:50.136: D/MainActivity/SpeechListener(13441): onRmsChanged()
36
Chris

La seule solution qui permettra de contourner ce problème est d'utiliser un service tiers. 4.1.1 et 4.2 tous les deux reposent sur une version du service de reconnaissance vocale qui n'adhère pas au comportement documenté en ce que le service qui l'exécute meurt en silence.

Si vous ne souhaitez pas utiliser une API tierce et que vous devez tenir compte de cette mort de service d'une manière ou d'une autre, il est possible mais ce n'est pas joli ou idéal.

Une fois le service éteint, aucune des méthodes suivantes ne sera jamais appelée:

  • onBeginningOfSpeech
  • onError
  • onResults
  • onEndOfSpeech

Mais si onBeginningOfSpeech est appelé avant la fin du service, vous pouvez être assuré que l'onError ou onEndOfSpeech sera finalement appelé.

Par conséquent, si tout ce que vous voulez, c'est vous assurer que vous êtes informé de la vie et de la mort du service dans Jellybean la solution de contournement pour ce problème dans le SpeechRecognizer intégré est de procéder comme suit:

  • Créez un indicateur booléen comme isSpeechRecognizerAlive.
  • Chaque fois que vous démarrez SpeechRecognizer, définissez l'indicateur ci-dessus sur false.
  • Dans onBeginningOfSpeech, s'il est appelé, définissez isSpeechRecognizerAlive sur true.
  • Maintenez un gestionnaire qui, sur un délai de 4 secondes, vérifiera l'état de isSpeechRecognizerAlive. Si elle est fausse, supprimez manuellement l'instance SpeechRecognizer. Si c'est vrai, ne faites rien. Le flux normal prendra soin des choses pour vous.

Pourquoi ce n'est pas une solution idéale pour maintenir une configuration de reconnaissance vocale continue

Ce n'était pas directement indiqué dans votre question, mais quelques personnes souhaitent le faire afin de pouvoir bénéficier d'une reconnaissance vocale continue. Ce n'est pas vraiment un bon moyen de le faire dans 4.1.1 et 4.2 car le service SpeechRecognition de Google démarre maintenant avec un son "bloop" non optionnel effet. Il semble qu'il n'y ait aucun moyen de désactiver ce son. Rien n'est répertorié dans l'API pour le contrôler. Vos utilisateurs n'apprécieront PAS d'être "bloopés" sur une boucle répétée de 4 secondes.

19
scriptocalypse

Vous pouvez essayer de fournir les extras suivants RecognizerIntent :

  • EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS
  • EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS
  • EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS

bien qu'aucun d'entre eux ne rentre vraiment dans ce cas. Android n'offre tout simplement pas de "WAIT_UNTIL_I_START_SPEAKING "extra. Ce n'est pas un bogue (dans Jelly bean ou ailleurs), c'est simplement un manque de fonctionnalité. Et même si un tel extra est ajouté dans une future version de Android there peut ne pas être une garantie que l'application de reconnaissance vocale (telle que Google Voice Search) l'implémente réellement. La documentation RecognizerIntent contient de nombreux extras avec un comportement non spécifié.

Votre meilleure option pourrait être de relancer le module de reconnaissance dès que vous obtenez onEndOfSpeech ou onError.

3
Kaarel

J'ai créé un service doté d'un logiciel de reconnaissance audio-vocale qui simule la continuité en se redémarrant à chaque fois qu'il y a une erreur ou un résultat. Comme vous pouvez le voir, mon service écoute un récepteur de diffusion afin de démarrer/arrêter un ASR continu (c'est une batterie coûteuse, donc je vous recommande d'exécuter ce service ASR continu uniquement lorsque votre interface utilisateur pertinente est au premier plan). Les résultats de l'ASR sont également diffusés sur le reste de l'application. Vous pouvez ignorer la diffusion, le service et l'écouteur de reconnaissance sont l'idée principale. N'OUBLIEZ PAS l'autorisation INTERNET, le manifeste et la déclaration de service:

<service Android:name=".speechRecognitionService" />

SpeechRecognitionService:

    /**
     * Created by Josh on 22/07/15.
     *  This service bears an Audio to Speech recognizer (ASR), once this service is started,
     *  it listens a broadcast called "asrService".
     *  the Service starts ASR when it receives a "START-ASR" value inside the "message" parameter of its broadcast receiver
     *  the Service stopss ASR when it receives a  "STOP-ASR" value inside the "message" parameter of its broadcast receiver
     Example:
     Intent intent = new Intent("asrService");
     intent.putExtra("message", "STOP-ASR");
     LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
     Once the ASR Listener that this service bears is running, it will broadcast the results is gets.
     To catch ASR results, implement a Broadcast receiver that listens to app.asrResult="ASRresult", for example:

     private BroadcastReceiver ASRReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String message = intent.getStringExtra("message");
            if(message!=null) {
                app.logwhite("ASR says: "+message);
            }
        }
    };
     LocalBroadcastManager.getInstance(this).registerReceiver(ASRReceiver, new IntentFilter(app.asrResult));

     Unregister the broadcast receiver likewise:
     LocalBroadcastManager.getInstance(this).unregisterReceiver(ASRReceiver);
     */

    public class speechRecognitionService extends Service {

        private static speechRecognitionListenerJosh speechReconListener;
        private static SpeechRecognizer mSpeechRecognizer=null;
        private static Intent mSpeechRecognizerIntent;
        private static boolean mIslistening=false;


        //======== BROADCAST RECEIVERS
        // handler for received Intents for the "my-event" event
        private BroadcastReceiver startASRReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String message = intent.getStringExtra("message");
                if(message.equals("START-ASR")) {
                    if (mIslistening == false) {


                        if (mSpeechRecognizer != null) {
                            mSpeechRecognizer.destroy();
                            mSpeechRecognizer = null;
                        }
                        app.logy("==BROADCAST Rx: START_ASR");

                        mSpeechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
                        mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en-US");
                        mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
                        //mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
                        //mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE ,   this.getPackageName());
                        mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS, 5000);
                        mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, 5000);
                        //mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true);
                        //mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3);

                        mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(getApplicationContext());
                        speechReconListener = new speechRecognitionListenerJosh();
                        mSpeechRecognizer.setRecognitionListener(speechReconListener);

                        mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
                    } else {
                        app.logy("==BROADCAST Rx: STOP_ASR");
                        mSpeechRecognizer.stopListening();
                        mSpeechRecognizer.destroy();
                        speechReconListener = null;
                    }
                }

                if(message.equals("STOP-ASR")){
                    app.logy("==BROADCAST Rx: STOP_ASR");
                    mSpeechRecognizer.stopListening();
                    mSpeechRecognizer.destroy();
                    speechReconListener = null;
                }
            }
        };


        @Override
        public void onCreate() {
            super.onCreate();

            mSpeechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
            mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en-US");
            mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL  ,   RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
            //mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
            mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE ,   this.getPackageName());
            mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, 4000);
            mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3);
            mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
            speechReconListener = new speechRecognitionListenerJosh();
            mSpeechRecognizer.setRecognitionListener(speechReconListener);

            LocalBroadcastManager.getInstance(this).registerReceiver(startASRReceiver, new IntentFilter("asrService"));
            app.toastlog("==ASR Service - CREATED");
        }

        @Override
        public void onDestroy() {
            super.onDestroy();
            LocalBroadcastManager.getInstance(this).unregisterReceiver(startASRReceiver);

            if (mSpeechRecognizer != null){
                mSpeechRecognizer.destroy();
                mSpeechRecognizer=null;
            }
            app.toastlog("==ASR Service - DESTROYED");
        }

        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }

        @Override //rather not use, runs before onStart
        public int onStartCommand(Intent intent, int flags, int startId) {
            return super.onStartCommand(intent, flags, startId);
        }

        @Override
        public void onStart(Intent intent, int startId) {
            super.onStart(intent, startId);
            app.toastlog("==ASRservice - onStart");
        }



        private class speechRecognitionListenerJosh  implements RecognitionListener {

            @Override
            public void onBeginningOfSpeech() {
                mIslistening=true;
                app.loge("=ASRListener - onBeginingOfSpeech");
            }

            @Override
            public void onBufferReceived(byte[] buffer){

            }

            @Override
            public void onEndOfSpeech(){
                app.loge("=ASRListener - onEndOfSpeech");
            }

            @Override
            public void onError(int error) {
                mIslistening=false;
                String code= Integer.toString(error);

                if(error==SpeechRecognizer.ERROR_CLIENT){ // 5
                    code="ERROR_CLIENT";
                    mIslistening=false;
                    mSpeechRecognizer.destroy();
                    Intent intent = new Intent("asrService");
                    intent.putExtra("message", "START-ASR");
                    LocalBroadcastManager.getInstance(app.appContext).sendBroadcast(intent);
                }

                if(error==SpeechRecognizer.ERROR_SPEECH_TIMEOUT){ // 6
                    code="SPEECH_TIMEOUT";
                    mSpeechRecognizer.stopListening();
                    mIslistening=false;
                    Intent intent = new Intent("asrService");
                    intent.putExtra("message", "START-ASR");
                    LocalBroadcastManager.getInstance(app.appContext).sendBroadcast(intent);
                    //Usualy bounces back to ERROR_CLIENT.
                }
                if(error==SpeechRecognizer.ERROR_NO_MATCH){ // 7
                    code="ERROR_NO_MATCH";
                    mIslistening=false;
                    Intent intent = new Intent("asrService");
                    intent.putExtra("message", "START-ASR");
                    LocalBroadcastManager.getInstance(app.appContext).sendBroadcast(intent);
                    //Usually bounces back to ERROR_CLIENT.
                }

                app.loge("=ASRListener - ASR Error: "+code);
                /*
                // 1 = NETWORK_TIMEOUT
                // 2 = ERROR_NETWORK
                // 3 = ERROR_AUDIO
                // 4 = ERROR_SERVER
                // 5 = ERROR_CLIENT
                // 8 = ERROR_RECOGNIZER_BUSY
                // 9 = ERROR_INSUFFICIENT_PERMISSIONS
                */

            }

            @Override
            public void onEvent(int eventType, Bundle params){

            }

            @Override //Somehow doesn't trigger upon partial results
            public void onPartialResults(Bundle partialResults){
                ArrayList<String> results=partialResults.getStringArrayList("EXTRA_PARTIAL_RECOGNITION");
                if(results!=null) {
                    if (results.size() > 0) {
                        app.logwhite("=== ASR Partial Results: " + results);
                    }
                }
            }

            @Override
            public void onReadyForSpeech(Bundle params){
                app.loge("=ASRListener - onReadyForSpeech, LISTENING  (((( ");
            }

            @Override
            public void onResults(Bundle resultBundle){
                app.loge("=ASRListener - onResults");
                ArrayList<String> result = resultBundle.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
                if(result!=null) {  //when speaking timeout happen, results is null

                    // matches are the return values of speech recognition engine

                    if (result.size() > 0) {
                        app.logwhite("=== ASR Results:");
                        app.logwhite(result.get(0));
                        //BC name, message
                        app.broadcast(app.asrResult,result.get(0)); //The result is broadcast to the entire app
                    }

                }

                mIslistening=false;
                Intent intent = new Intent("asrService");
                intent.putExtra("message", "START-ASR");
                LocalBroadcastManager.getInstance(app.appContext).sendBroadcast(intent);
            }

            @Override
            public void onRmsChanged(float rmsdB){
                //VOLUME VUmeter!!!!
            }
        }
    }
3
Josh

J'étais confronté au même problème pendant un certain temps et je n'ai pu trouver la bonne réponse de travail nulle part. Pour que l'écoute se produise à l'infini, postez onError() ou onResults() J'appelais à nouveau speechRecognizer.startListening(intent); après avoir réinstancié le speechRecognizer et réinitialisé l'objet d'intention.

Mais comme vous l'avez mentionné, cela finissait par s'éteindre après avoir écouté un moment.

Voici ce que j'ai essayé et cela a fonctionné pour moi.

Je me suis juste assuré qu'avant de rappeler la speechRecognizer.startListening(intent); j'appellerais

speechRecognizer.stopListening();
speechRecognizer.destroy();

et continuer à faire les choses mentionnées dans le premier paragraphe.

Jusqu'à présent, cela a bien fonctionné pour moi.

0
UzumakiL