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();
}
});
HashMap 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;
}
};
}
Ci sono diversi "blocchi".@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();
}
});
HashMap 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);
Disabilita i pulsanti per evitarne pressioni accidentali con l'orecchio;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