Ein Memo beim Erstellen einer Anwendung mit TextToSpeech mit Android
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);
}
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 ...
}
...
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