Vediamo l'effetto del tasto Indietro sul Form.
Quando inizia la suoneria e appare Form, il tasto indietro produce l'evento OnDestroy:
07-29 13:28:31.029: D/FORM(20401): ONDESTROYPerché dunque la suoneria continua a suonare?
Perché non è arrivato il messaggio ringtone.stop(), il quale è stato impostato per il Button insieme a finish(), ma non per il finish() dovuto alla pressione del tasto Indietro.
Posso ovviare mettendo ringtone.stop() in associazione a onDestroy() in modo che chiamando onDestroy(), sia con il Button virtuale tramite il finish(), sia con il tasto fisico Indietro, l'effetto sia sempre quello di stoppare la suoneria.
07-29 13:33:32.022: D/MAIN(20401): ONDESTROYEsatto!
Procedo alla modifica: nel codice del button lascio solo finish():
button=(Button)findViewById(R.id.button1); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mService.StartTime(); finish(); } });...e metto ringtone.stop() nell'evento onDestroy():
@Override public void onDestroy(){ super.onDestroy(); ringtone.stop(); Log.d("FORM","ONDESTROY"); }E ora provo: funziona!
Ma c'è un altro problema: sia con il tasto indietro sia spazzando via la finestrella recent dopo la pressione del tasto Overview, l'Alarm rimane impostato ma non si avvia un nuovo ciclo di tempo.
Ovviamente, devo fare lo stesso procedimento di cui sopra con mService.startTime().
Lo faccio:
button=(Button)findViewById(R.id.button1); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } });
@Override public void onDestroy(){ super.onDestroy(); ringtone.stop(); mService.StartTime(); Log.d("FORM","ONDESTROY"); }E vediamo...
Sì, funziona.
Ma c'è una differenza di fondo fra Indietro e Overview.
Nel primo caso, posso anche usare il tasto per togliere di mezzo la finestra e aspettare il prossimo intervallo, mentre nel secondo caso in genere uso questa manovra per cessare l'applicazione.
L'unico modo che avevo previsto per cessare l'applicazione era impostare Disattiva per l'Alarm e quindi chiudere l'activity Main... ma come faccio adesso a differenziare il tasto Indietro con lo spazzamento del Task dalla finestra dei Recents?
Nessun commento:
Posta un commento