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