public class Telefono extends Activity { AudioManager audioManager; Handler HndNonRisposta; Handler handler; String frase; Ringtone ringtone; TimerService mService; boolean mBound; Button bttRispondi, bttRifiuta; Helper helper; Timer timerNoRisposta; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_telefono); helper=new Helper(getApplicationContext()); final AudioManager audioManager=(AudioManager)this.getSystemService(Context.AUDIO_SERVICE); //-------------------------------------------------------------------------------- //GESTIONE DELLE STRINGHE Cursor crs=helper.query(); if(crs.getCount()!=0){ Random rnd=new Random(); int indice=rnd.nextInt(crs.getCount()); crs.moveToPosition(indice); frase=crs.getString(0); }else{ frase="Questa è una frase di prova"; } //-------------------------------------------------------------------------------- //------------------------------------------------------------------------------- //SUONERIA //--------------------------------------------------------------------------------- Uri ringtoneUri=RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE); ringtone=RingtoneManager.getRingtone(this, ringtoneUri); ringtone.play(); bttRispondi=(Button)findViewById(R.id.button1); bttRifiuta=(Button)findViewById(R.id.button2); TimerTask noRisposta=new TimerTask(){ @Override public void run() { ringtone.stop(); mService.startTime(); finish(); } }; timerNoRisposta=new Timer(); timerNoRisposta.schedule(noRisposta, 10000); //BOTTONE RISPOSTA bttRispondi.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { bttRispondi.setEnabled(false); bttRifiuta.setEnabled(false); timerNoRisposta.cancel(); timerNoRisposta.purge(); ringtone.stop(); TimerTask tt=new TimerTask(){ @Override public void run() { mService.tts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener(){ @Override public void onUtteranceCompleted(String utteranceId) { audioManager.setSpeakerphoneOn(true); audioManager.setMode(AudioManager.MODE_NORMAL); mService.startTime(); finish(); } }); HashMapCi sono diversi "blocchi".map=new HashMap (); map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "value"); audioManager.setMode(AudioManager.MODE_IN_CALL); audioManager.setSpeakerphoneOn(false); mService.tts.speak(frase, TextToSpeech.QUEUE_FLUSH, map); } }; Timer Timer = new Timer(); Timer.schedule(tt, 1500); } }); //BOTTONE RIFIUTA bttRifiuta.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { timerNoRisposta.cancel(); timerNoRisposta.purge(); ringtone.stop(); mService.startTime(); finish(); } }); } //------------------------------------------------------------------------- @Override public void onWindowFocusChanged(boolean hasFocus){ if(!hasFocus){ ringtone.stop(); }else{ ringtone.play(); } } @Override public void onStart(){ super.onStart(); Intent intent=new Intent(this,TimerService.class); bindService(intent,mConnection,Service.BIND_AUTO_CREATE); } @Override public void onStop(){ super.onStop(); if(mBound){ unbindService(mConnection); mBound=false; } } ServiceConnection mConnection=new ServiceConnection(){ @Override public void onServiceConnected(ComponentName name, IBinder service) { LocalBinder bnd=(LocalBinder)service; mService=bnd.getService(); mBound=true; } @Override public void onServiceDisconnected(ComponentName name) { mBound=false; } }; }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_telefono); helper=new Helper(getApplicationContext()); final AudioManager audioManager=(AudioManager)this.getSystemService(Context.AUDIO_SERVICE); Qui, subito dopo l'inizio di onCreate, si inizializzano Helper, per la gestione del database, e AudioManager, per la gestione delle telefonate.
C'è poi la gestione delle stringhe, che sono state salvate nel database da un'altra schermata:
//GESTIONE DELLE STRINGHE Cursor crs=helper.query(); if(crs.getCount()!=0){ Random rnd=new Random(); int indice=rnd.nextInt(crs.getCount()); crs.moveToPosition(indice); frase=crs.getString(0); }else{ frase="Questa è una frase di prova"; }
Ora c'è la suoneria: questo codice viene eseguito sul momento e innesca la suoneria:
//------------------------------------------------------------------------------- //SUONERIA //--------------------------------------------------------------------------------- Uri ringtoneUri=RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE); ringtone=RingtoneManager.getRingtone(this, ringtoneUri); ringtone.play();
Ora, dopo l'istanziazione dei due buttons (che dovrei spostare prima) c'è la chiusura ritardata della suoneria nel caso in cui non vi sia risposta:
bttRispondi=(Button)findViewById(R.id.button1); bttRifiuta=(Button)findViewById(R.id.button2); TimerTask noRisposta=new TimerTask(){ @Override public void run() { ringtone.stop(); mService.startTime(); finish(); } }; timerNoRisposta=new Timer(); timerNoRisposta.schedule(noRisposta, 10000);Questo codice di interruzione della suoneria va a finire alla via finale comune: mService.startTime e finish().
Ed ecco quindi i codici dei pulsanti.
//BOTTONE RISPOSTA bttRispondi.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { bttRispondi.setEnabled(false); bttRifiuta.setEnabled(false); timerNoRisposta.cancel(); timerNoRisposta.purge(); ringtone.stop(); TimerTask tt=new TimerTask(){ @Override public void run() { mService.tts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener(){ @Override public void onUtteranceCompleted(String utteranceId) { audioManager.setSpeakerphoneOn(true); audioManager.setMode(AudioManager.MODE_NORMAL); mService.startTime(); finish(); } }); HashMapDisabilita i pulsanti per evitarne pressioni accidentali con l'orecchio;map=new HashMap (); map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "value"); audioManager.setMode(AudioManager.MODE_IN_CALL); audioManager.setSpeakerphoneOn(false); mService.tts.speak(frase, TextToSpeech.QUEUE_FLUSH, map); } }; Timer Timer = new Timer(); Timer.schedule(tt, 1500);
Elimina il task della non-risposta;
Blocca la suoneria;
Incapsula in un TimerTask tutto il codice per il parlato: dapprima il listener per il termine del parlato, quindi crea l'HashMap, imposta il microfono del cellulare e parla. Dopo il parlato OnUtteranceCompletedListener torna alla via finale comune mService.startTime e finish().
Quindi il pulsante "Rifiuta":
//BOTTONE RIFIUTA bttRifiuta.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { timerNoRisposta.cancel(); timerNoRisposta.purge(); ringtone.stop(); mService.startTime(); finish(); } }); }Questo elimina il Task della "Non risposta", blocca la suoneria, e torna alla via finale comune mService.startTime e finish().
Mi sembra abbastanza stabile.
Quindi in pratica ogni evenienza esegue nell'ordine:
- Blocco della suoneria;
- mService.startTime;
- finish();
Nessun commento:
Posta un commento