Fin qua credo di saper scrivere abbastanza il codice:
public void onCreate(){ TTS=new TextToSpeech(this,new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { if(status==TextToSpeech.SUCCESS){ int result=TTS.setLanguage(Locale.ITALIAN); TTS.setOnUtteranceCompletedListener(listener); TTS.speak("Ciao, ciccio bello", TextToSpeech.QUEUE_FLUSH, null); } } });Che è stato scritto nel contesto di un Service.
Questo parla.
Lo riscrivo da capo e verifico che parli una volta chiamato il Service.
TTS=new TextToSpeech(this,new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { if(status==TextToSpeech.SUCCESS){ TTS.setLanguage(Locale.ITALIAN); TTS.speak("Io sono il codice che dovrebbe parlare",TextToSpeech.QUEUE_FLUSH,null); } } });E funziona!
Adesso voglio una conseguenza quando ha terminato di parlare.
Provo a usare onUtteranceCompletedListener.
Ma per fare questo devo usare Hashmap.
Vediamo...
Sono due righe.
Creiamo innanzitutto la HashMap, subito dopo il setLanguage(Locale.ITALIAN).
HashMapQuindi ci devo inserire un valore, che è TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID.map=new HashMap ();
Proviamo...
map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "key");E adesso imposto map come ultimo parametro del metodo speak.
Rifacciamo tutto:
TTS=new TextToSpeech(this,new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { if(status==TextToSpeech.SUCCESS){ TTS.setLanguage(Locale.ITALIAN); HashMapE mettiamo un'azione da eseguire in onUtteranceCompletedListener. Devo però impostare il listener a TTS:map=new HashMap TTS.speak("Io sono il codice che dovrebbe parlare",TextToSpeech.QUEUE_FLUSH,map); } } });(); map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"key");
@Override public void onInit(int status) { if(status==TextToSpeech.SUCCESS){ TTS.setLanguage(Locale.ITALIAN); TTS.setOnUtteranceCompletedListener(listener); HashMapFatto questo creo il listener:map=new HashMap (); map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"key"); TTS.speak("Io sono il codice che dovrebbe parlare",TextToSpeech.QUEUE_FLUSH,map); } } });
OnUtteranceCompletedListener listener=new TextToSpeech.OnUtteranceCompletedListener() { @Override public void onUtteranceCompleted(String utteranceId) { // TODO Auto-generated method stub } };E ci metto una segnalazione da fare in LogCat:
OnUtteranceCompletedListener listener=new TextToSpeech.OnUtteranceCompletedListener() {
@Override
public void onUtteranceCompleted(String utteranceId) {
Log.v("SPEAKER","UTTERANCE COMPLETED LISTENED");
}
};
E vediamo se appena terminato di parlare mi dà questo segnale in LogCat...06-21 07:39:58.249: V/SPEAKER(9142): UTTERANCE COMPLETED LISTENEDOttimo!
Nessun commento:
Posta un commento