- Creazione di due activities
- Creazione di un service foreground;
- Bindaggio fra activities e service.
Il passo successivo è definire il metodo startTime e stopTime.
Per prima cosa è necessario avere un Handler, all'inizio, fra le dichiarazioni di variabili:
Handler handler=new Handler();Quindi procedo alla startTime:
public void startTime(){ Runnable runnable=new Runnable(){ @Override public void run() { Intent intent =new Intent(getApplicationContext(),Telefono.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } }; handler.postDelayed(runnable, 7000); }(ho impostato il ritardo a 7 secondi fissi solo temporaneamente e per provare). Questo metodo deve essere innescato dal pulsante "Attiva" della MainActivity:
bttAttiva=(Button)findViewById(R.id.button1); bttAttiva.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mService.startTime(); } });Il listener viene impostato in onCreate, prima che sia stato istanziato mService, ma siccome si userà sicuramente dopo, è lecito.
Nel frattempo, vado a impostare anche il bottone bttRispondi nella terza Activity, ossia Telefono, in modo che questa possa rimandare a startTime del Service per poi chiudersi, innescando il ciclo.
bttRispondi=(Button)findViewById(R.id.button1); bttRifiuta=(Button)findViewById(R.id.button2); bttRispondi.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mService.startTime(); finish(); } });(Ci è capitato in mezzo un pezzo del codice di bttRifiuta, che implementerò in seguito...)
Facciamo la prova e vediamo se si innesca il ciclo.
Funziona perfettamente come previsto!
Ora devo poter cancellare la funzione a tempo.
Ma un momento!!!!! L'icona del Service non mi appare!!! Indagando qualche minuto mi rendo conto che ho dimenticato l'istruzione più importante per il Service foreGround! Quindi io stavo lavorando su un service che per pura fortuna non era stato killato, ma che avrebbe potuto venire killato da un momento all'altro!!!
Rifaccio l'onCreate del TimerService...
public void onCreate(){
Intent intent=new Intent(this,MainActivity.class);
PendingIntent pi=PendingIntent.getActivity(this, 0, intent, 0);
Notification notification=new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.cornetta)
.setContentTitle("CoachCall")
.setContentText("Telefonate dal Coach")
.setContentIntent(pi).build();
startForeground(1,notification);
}
Okay: vediamo se appare la cornetta come icona...Bene, ora gestiamo la cancellazione del postDelayed.
Creo in TimerService la funzione stopTime:
public void stopTime(){ handler.removeCallbacksAndMessages(null); }Semplicissima.
Quindi ne collego l'azione al pulsante bttDisattiva di MainActivity.
bttDisattiva=(Button)findViewById(R.id.button2); bttDisattiva.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mService.stopTime(); } });Dovrebbe funzionare...
E infatti funziona benissimo!
Imposto la risposta anche per il pulsante bttRifiuta dell'activity Telefono:
bttRifiuta=(Button)findViewById(R.id.button2); bttRifiuta.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mService.startTime(); finish(); } });...che per il momento è uguale alla risposta per il pulsante bttRispondi, ossia ricomincia il ciclo, ma successivamente, ovviamente, vi saranno introdotte le dovute differenze.
Nessun commento:
Posta un commento