[JAVA] Hinweise zum Abrufen von Rückrufen von TextToSpeech

Ein Memo beim Erstellen einer Anwendung mit TextToSpeech mit Android

wichtiger Punkt

  1. Ein Rückruf kann nur empfangen werden, wenn Äußerung_ID festgelegt ist.
  2. Der Rückruf, wenn er während der Wiedergabe gestoppt wird, kann unterschiedlich sein.
  3. Die Verarbeitung im Rückruf erfolgt im UI-Thread.

1. Ein Rückruf kann nur empfangen werden, wenn Äußerung_ID festgelegt ist.

So rufen Sie den Rückruf in TextToSpeech onInit ab textToSpeech.setOnUtteranceProgressListener(…) ich mache Wenn Sie die Äußerungs-ID der Methode nicht festlegen, mit der die Stimme tatsächlich abgespielt wird, erhalten Sie keinen Rückruf. Insbesondere für 4 Serien oder weniger ist es schwer zu verstehen, da Sie es mit HashMap richtig einstellen müssen.

tts.java


if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
	      //Mehr als Lutscher
                String id = String.valueOf(orderNo);
                textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null, utteranceId);
            } else {
	      //Unten Kitkat
                HashMap<String, String> params = new HashMap<String, String>();
                String id = String.valueOf(orderNo);
                params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, id);
                textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, params);
            }

2. Der Rückruf, wenn er während der Wiedergabe gestoppt wird, kann unterschiedlich sein.

Es gab einen Unterschied im Verhalten von onDone, das aufgerufen wurde, als die Wiedergabe auf meinem Terminal beendet war, und ich war ziemlich süchtig danach. OnDone wird aufgerufen, wenn es in 4er Galaxy und 5er Nexus gestoppt wird. OnDone wird nicht aufgerufen, wenn es im Xperia der 6er-Serie gestoppt wird. .. .. In meinem Fall, wenn ich die Wiedergabe mit der Stopp-Taste stoppe, Ich hatte Probleme beim Steuern, den nächsten Text einzustellen und die Wiedergabe zu starten, wenn die Wiedergabe beendet war.

Behalten Sie als Problemumgehung den TextToSpeech-Status in enum und bei Wenn die Stopptaste gedrückt wird, wird der Status in den Stoppzustand geändert. Wenn onDone, überprüfen Sie den Status und stellen Sie die nächste Wiedergabe ein, wenn Sie gestoppt sind Korrigiert, indem der Status zum Zeitpunkt des OnStart-Rückrufs auf den Wiedergabestatus gesetzt wurde.

tts.java


//Zum Zeitpunkt von setOnClickListener der Stop-Taste
//ttsStatus = TTSStatusEnum.STOP;Zu

textToSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener() {
                @Override
                public void onStart(String utteranceId) {
		          ttsStatus = TTSStatusEnum.PLAY;
                }

                @Override
                public void onDone(String utteranceId) {
		          if (ttsStatus == TTSStatusEnum.STOP) {
		            //Schon aufhören
		            return;
		          }
		          ttsStatus = TTSStatusEnum.STOP;
		          //Nächster Wiedergabevorgang ...
                }
...

3. Die Verarbeitung im Rückruf erfolgt im UI-Thread.

UI-Verarbeitung, die die Farbe des im Rückruf wiedergegebenen Wortlauts ändern möchte Sie müssen es explizit im UI-Thread verarbeiten.

tts.java


textToSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener() {
                @Override
                public void onStart(String utteranceId) {
		            runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                           //Verarbeitung, um die Textfarbe rot zu machen
                        }
                    });
                }

                @Override
                public void onDone(String utteranceId) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
			           //Verarbeitung zur Wiederherstellung der Textfarbe
                       }
                    });
                }
...

Referenz: Android TTS onUtteranceCompleted-Rückruf wird nicht aufgerufen

Recommended Posts

Hinweise zum Abrufen von Rückrufen von TextToSpeech
[Android] Hinweise zu XML
Hinweise zum Aufrufen von Installer in der Android App
Hinweise zur Migration von CircleCI 1.0 auf 2.0
Rufen Sie Java von C ++ auf Android NDK auf
Hinweise zum Erstellen eines Android-Plug-Ins für Unity
[Android] Detaillierte Hinweise
Was tun, wenn TextToSpeech unter Android 11 nicht funktioniert?
Hinweise zum Aktualisieren von Ubuntu über die Befehlszeile (16.04 → 18.04, 18.04 → 20.04 beide)