L'aggiunta di OnUtteranceCompletedListener è un po' contorta.
Ho dichiarato onUtteranceCompletedListener nel contesto del Service, per poi implementarla nel contesto di Telefono.
E' un comportamento sensato?
Che cosa è, qui, nella fattispecie, OnUtteranceCompletedListener?
Sarebbe un Listener, ossia un'interfaccia.
Con quesco codice:
mService.onUtteranceCompletedListener=new TextToSpeech.OnUtteranceCompletedListener(){ @Override public void onUtteranceCompleted(String utteranceId) { mService.startTime(); finish(); } };ho istanziato la variabile onUtteranceCompletedListener, presente in Service, creando un nuovo Listener.
Ma è proprio necessario che la variabile si trovi in un'altra classe?
Non potrei metterla in onCreate di Telefono?
Provo a metterla nella classe Activity Telefono.
Funziona lo stesso.
Ecco il codice:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_telefono); onUtteranceCompletedListener=new TextToSpeech.OnUtteranceCompletedListener(){ @Override public void onUtteranceCompleted(String utteranceId) { mService.startTime(); finish(); } };In pratica, per creare un listener (ora faccio un po' di analisi) bisogna avere un oggetto del tipo listener.
Questo oggetto si setta poi come listener.
La cosa si può fare anche in forma anonima.
Perché qui non lo posso fare in forma anonima, ossia senza usare una variabile?
Perché devo avere una variabile a livello di classe.
Provo pure a farlo, ma devo farlo nella stessa funzione in cui uso tts, cui va poi settato il listener.
bttRispondi.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mService.tts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener(){ @Override public void onUtteranceCompleted(String utteranceId) { mService.startTime(); finish(); } }); HashMap hashMap=new HashMap(); hashMap.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "id"); mService.tts.speak("Ciao, scemo",TextToSpeech.QUEUE_FLUSH,hashMap); } });Funziona ugualmente, ovviamente.
Nessun commento:
Posta un commento