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);
HashMap 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);
}
}
});
E mettiamo un'azione da eseguire in onUtteranceCompletedListener. Devo però impostare il listener a TTS:
@Override
public void onInit(int status) {
if(status==TextToSpeech.SUCCESS){
TTS.setLanguage(Locale.ITALIAN);
TTS.setOnUtteranceCompletedListener(listener);
HashMap 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);
}
}
});
Fatto questo creo il listener:
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