Un mémo lors de la création d'une application à l'aide de TextToSpeech avec Android
Pour obtenir le rappel dans TextToSpeech onInit textToSpeech.setOnUtteranceProgressListener(…) je fais Si vous ne définissez pas l'utteranceId de la méthode qui joue réellement la voix, vous ne recevrez pas le rappel. Surtout pour 4 séries ou moins, c'est difficile à comprendre car il faut le paramétrer correctement avec HashMap.
tts.java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//Plus qu'une sucette
String id = String.valueOf(orderNo);
textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null, utteranceId);
} else {
//Sous 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);
}
Il y avait une différence dans le comportement de onDone appelé lorsque la lecture était terminée sur mon terminal, et j'en étais assez accro. OnDone est appelé lorsqu'il est arrêté dans la série 4 Galaxy et la série 5 Nexus. OnDone n'est pas appelé lorsqu'il est arrêté dans 6 series Xperia. .. .. Dans mon cas, lorsque j'arrête la lecture avec le bouton d'arrêt, J'avais du mal à contrôler pour définir le texte suivant et démarrer la lecture lorsque la lecture était terminée.
Pour contourner le problème, conservez le statut TextToSpeech dans enum et Lorsque le bouton d'arrêt est enfoncé, l'état passe à l'état arrêté. Lorsque cette option est activée, vérifiez l'état et définissez la lecture suivante si elle est arrêtée Corrigé en définissant l'état sur l'état de lecture au moment du rappel onStart.
tts.java
//Au moment de setOnClickListener du bouton d'arrêt
//ttsStatus = TTSStatusEnum.STOP;À
textToSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
ttsStatus = TTSStatusEnum.PLAY;
}
@Override
public void onDone(String utteranceId) {
if (ttsStatus == TTSStatusEnum.STOP) {
//Déjà arrêter
return;
}
ttsStatus = TTSStatusEnum.STOP;
//Prochain processus de lecture ...
}
...
Traitement de l'interface utilisateur qui souhaite changer la couleur du libellé lu dans le rappel Vous devez le traiter explicitement dans le thread d'interface utilisateur.
tts.java
textToSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
runOnUiThread(new Runnable() {
@Override
public void run() {
//Traitement pour rendre la couleur du texte rouge
}
});
}
@Override
public void onDone(String utteranceId) {
runOnUiThread(new Runnable() {
@Override
public void run() {
//Traitement pour restaurer la couleur du texte
}
});
}
...
Référence: Le rappel Android TTS onUtteranceCompleted n'est pas appelé
Recommended Posts