2011-01-17 24 views
8

Estoy tratando de verificar si mi alarma está activa o no. El método alarmIsSet devolverá falso antes de que se establezca la alarma, verdadero cuando se establece la alarma. Hasta ahora todo bien, sin embargo, después de la alarma que cancelé alarmIsSet continuará devolviéndome verdadero hasta que reinicie el dispositivo. ¿Cómo puedo solucionar esto?Cómo verificar si la alarma está configurada

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

Respuesta

0

La manera más fácil es comprobar los valores de la hora (fecha y) en la variable de alarma, si no es el mismo valor que cuando no se ha establecido una alarma (para su revisión, una vez que es eso) entonces indicaría que la alarma está activa y en el momento del control en el programa, es un tiempo que ha pasado y la alarma ha sonado o es un tiempo que aún no ha llegado y la alarma aún no ha sonado o se fue. Tenga en cuenta que las reglas pueden permitir solo una activación de alarma por sesión de dispositivo antes de un reinicio o apagado o cada 12 o 24 horas y esa podría ser la razón por la cual el estado no se borra.

14

Sólo hay que añadir

pi.cancel(); 

después

am.cancel(pi); 
1

Después de tener algunos dolores de cabeza con estas cosas a mí mismo, me di cuenta que si de alguna manera había creado una intención pendiente para probar cosas, que en realidad no fue eliminado entre las pruebas. Incluso matar la aplicación no lo hizo. La intención aún permanecía en el sistema y seguía siendo verdadera cuando se buscaba. De hecho, tuve que escribir un código para matarlo antes de probarlo correctamente.

Cuestiones relacionadas