2011-01-17 7 views
8

Sto cercando di verificare se il mio allarme è attivo o meno. Il metodo di allarme IsSet tornerà falso prima che l'allarme sia impostato, true quando l'allarme è impostato. Fin qui tutto bene, tuttavia, dopo l'allarme ho cancellato l'allarme. IsSet continuerà a restituire true finché non riavvio il dispositivo. Come posso risolvere questo problema?Come verificare se l'allarme è impostato

public class Alarm extends Activity { 
    private Intent intent = new Intent("PROPOSE_A_TOAST"); 

    private void alarm (boolean activate) { 
     AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0); 

     if(activate == true) { 
      int type = AlarmManager.ELAPSED_REALTIME_WAKEUP; 
      long interval = 3000; 
      long triggerTime = SystemClock.elapsedRealtime();  
      am.setRepeating(type, triggerTime, interval, pi);  
     } else { 
      am.cancel(pi); 
     } 
    } 

    private boolean alarmIsSet() { 
     return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_NO_CREATE) != null; 
    } 
} 

risposta

0

Il modo più semplice è quello di controllare i valori del tempo (data e) nella variabile d'allarme, se non è lo stesso valore di quando l'allarme non è stato impostato (per poter controllare una volta di cosa si tratta) quindi indicherà che l'allarme è attivo e al momento del controllo nel programma è o un tempo che è passato e l'allarme ha suonato o è un tempo che deve ancora arrivare e l'allarme non è ancora suonato o andato via. Si noti che le regole possono consentire solo una attivazione dell'allarme per sessione di dispositivo prima di un riavvio o spegnimento o ogni 12 o 24 ore e questo potrebbe essere il motivo per cui lo stato non viene cancellato.

14

Basta aggiungere

pi.cancel(); 

dopo

am.cancel(pi); 
1

Dopo qualche mal di testa con questa roba me stesso, ho scoperto che se io in qualche modo avevo creato un intento in attesa durante la prova di roba, che in realtà non è stato chiarito tra i test. Anche uccidere l'app non lo ha fatto. L'intento è rimasto nel sistema e ha continuato a restituire true durante il controllo. In realtà dovevo scrivere del codice per ucciderlo prima che fosse testato correttamente.