Il fatto che un Alarm sia attivo dipende, se ricordo bene, dal PendingIntent.
Si chiama il PendingIntent con una flag impostata a NO_CREATE per vedere se esiste. Cerchiamo di riscrivere la cosa...
Mi sono assicurato che gli intent lavorino bene anche con questa formula:
intent=new Intent(getApplicationContext(),Seconda.class);
pendingIntent=PendingIntent.getActivity(getApplicationContext(),0,intent,0);
alarmManager=(AlarmManager)getApplicationContext().getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+intervalloCasuale*1000,pendingIntent);
e pare che non ci siano problemi: l'activity Seconda si presenta regolarmente all'elapse degli intervalli casuali.Ora devo scrivere la funzione AlarmOn che individua l'Alarm congegnato con quell'intent e quel pendingIntent, in qualunque activity sia stato implementato, a quanto pare.
Eccola:
public boolean AlarmOn(){ intent=new Intent(getApplicationContext(),Seconda.class); boolean risultato=PendingIntent.getActivity(getApplicationContext(),0,intent,PendingIntent.FLAG_NO_CREATE)!=null; return risultato; }Ora devo fare in modo che quando si apre MainActivity vi appaia il valore di AlarmOn.
Proviamo...
Ci metto una TextView.
Il risultato era sempre true, perché ho sbagliato la sintassi della funzione AlarmOn.
Quella corretta è:
public boolean AlarmOn(){ intent=new Intent(getApplicationContext(),Seconda.class); boolean risultato=(PendingIntent.getActivity(getApplicationContext(),0,intent,PendingIntent.FLAG_NO_CREATE)!=null); return risultato; }Con questa, inizia con false, quindi una volta che si è attivato l'alarm resta sempre true.
Bisogna definire la funzione che disattiva l'alarm e vedere come attivarla.
Posso farla dipendere da un altro pulsante su MainActivity.
Inserisco un altro button.
Ecco il listener: ci devo aggiungere il codice che, annullando il pendingIntent, annulla l'Alarm.
buttonStop.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { } });Ricopio pari pari il codice che stabilisce Intent, PendingIntent e AlarmManager:
buttonStop.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { intent=new Intent(getApplicationContext(),Seconda.class); pendingIntent=PendingIntent.getActivity(getApplicationContext(),0,intent,0); alarmManager=(AlarmManager)getApplicationContext().getSystemService(ALARM_SERVICE); } });E poi ci aggiungo il codice che cancella il PendingIntent:
buttonStop.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { intent=new Intent(getApplicationContext(),Seconda.class); pendingIntent=PendingIntent.getActivity(getApplicationContext(),0,intent,0); alarmManager=(AlarmManager)getApplicationContext().getSystemService(ALARM_SERVICE); alarmManager.cancel(pendingIntent); if(pendingIntent!=null)pendingIntent=null; } });E vediamo se il ciclo si interrompe.
Devo settarlo a pochi secondi altrimenti lo studio è una palla tremenda!
Sembra che sia tutto OK.
Posso creare un listener per lo status dell'Alarm.
Ci provo.
Fatto e funziona tutto!
Nessun commento:
Posta un commento