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