2011-01-17 11 views
8

Próbuję sprawdzić, czy mój alarm jest aktywny, czy nie. Metoda alarmIsSet zwróci wartość false, zanim alarm zostanie ustawiony, wartość true, gdy alarm jest ustawiony. Jak dotąd jednak dobrze po alarmie, który anulowałem alarmIsSet będzie nadal zwracać wartość true, dopóki nie zrestartuję urządzenia. Jak to naprawić?Jak sprawdzić, czy alarm jest ustawiony?

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; 
    } 
} 

Odpowiedz

0

Najprostszym sposobem jest sprawdzenie wartości czasu (data i) w zmiennej alarmu, jeśli nie jest to ta sama wartość, jak wtedy, gdy alarm nie został ustawiony (dla sprawdzenia raz co to jest) to wskazywałoby, że alarm jest aktywny i w czasie sprawdzania w programie jest to albo czas, który minął i zabrzmiał alarm albo jest to czas, który jeszcze się nie pojawił, a alarm jeszcze nie zabrzmiał, albo zgasła. Należy pamiętać, że reguły mogą zezwalać tylko na jedną aktywację alarmu na sesję urządzenia przed ponownym uruchomieniem lub wyłączeniem zasilania lub co 12 lub 24 godziny, i może to być przyczyną, dla której status nie zostanie usunięty.

14

Po prostu trzeba dodać

pi.cancel(); 

po

am.cancel(pi); 
1

Po pewne bóle głowy z tych rzeczy sam, okazało się, że jeśli jakoś stworzył oczekiwaniu intencję podczas testowania rzeczy, które to faktycznie nie zostało wyczyszczone między testami. Nawet zabicie aplikacji tego nie zrobiło. Intencja wciąż pozostawała w systemie i powracała do stanu rzeczywistego, gdy sprawdzała. Musiałem napisać jakiś kod, żeby go zabić, zanim zostanie poprawnie przetestowany.

Powiązane problemy