JavascriptProva

sabato 18 giugno 2016

Azione ripetitiva con Alarm.setInexactRepeating e cancellazione di un Alarm

Vediamo sulla documentazione setInexactRepeating di AlarmManager.
Il secondo parametro si chiama triggerAtMillis e il secondo intervalMillis.
Che significano?

Ecco: il primo dovrebbe essere il tempo intercorso prima della prima ripetizione, e l'altro il tempo fra le ripetizioni.
Facciamo pochi secondi...

alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 1000*20, 1000*5, pendingIntent);
Vediamo... No... appare immediatamente per poi andare a intervalli.

Ma se la proprietà AlarmManager.INTERVAL_HALF_HOUR comprendesse SystemClock.elapsedRealtime sommata di mezz'ora?

Riproviamo con questa sintassi:
  alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
           SystemClock.elapsedRealtime()+1000*40, 
           1000*5, 
           pendingIntent);
Sì, adesso funziona.

Solo che adesso il mio Service va mettendo toast a tempo indeterminato.
Come lo stoppiamo?
Ci aggiungo questo nel codice di MainActivity:
 public void onDestroy(){
  super.onDestroy();
  stopService(new Intent(this,Servizio2.class));
 }
...che non funziona! Provo a metterlo in un onClickListener del button, ma non funziona lo stesso.
Dopo un po' di tribolazioni ho avuto l'intuizione che devo stoppare l'AlarmManager prima di stoppare il Service!

Proviamo:
  button.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    alarmManager.cancel(pendingIntent);
    
   }
  });
Vediamo se la smette di lampeggiare!

E' riuscito!
Per completezza devo chiudere anche il Service:
  button.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    alarmManager.cancel(pendingIntent);
    stopService(new Intent(getApplicationContext(),Servizio2.class));
   }
  });
e ne voglio una conferma mettendo un segnale nell'evento onDestroy del Service:
 @Override
 public void onDestroy(){
  super.onDestroy();
  Log.v("SEGNALE","ONDESTROY");
 }
Ecco:
06-18 18:07:02.445: V/SEGNALE(14864): ONDESTROY

Nessun commento:

Posta un commento