En primer lugar, un pequeño tutorial sobre cómo acceder a las alarmas creadas anteriormente:
Puede diferenciar entre las alarmas mediante la creación de cada uno con un identificador único, tales como:
Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,UNIQUE_ID_GOES_HERE, intent, 0);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);
Cuando se desea acceder esta alarma, debe crear el mismo PendingIntent con la misma identificación única. Por ejemplo, lo siguiente solo accederá a una alarma que haya creado con PendingIntent id 1234. Luego, cancelará la anterior y la restablecerá.
Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 1234, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);
La idea es simple. Mantenga un registro de los identificadores y luego utilícelos para acceder a sus respectivas alarmas. Si crea varias alarmas con la misma identificación, la más reciente cancelará la anterior.
Al llegar a su problema principal, en lugar de verificar si su alarma está activa cada vez que inicia su aplicación, simplemente vuelva a establecerla en el método onCreate()
de su actividad. con el mismo PendingIntent que he descrito anteriormente. Esto le ahorra toda la molestia de verificar si la alarma está configurada previamente o no. Dado que su objetivo es mantener activa la alarma, no hará daño anular la configuración anterior cada vez que inicie la aplicación. Solo asegúrate de usar la misma identificación para crear tu PendingIntent.
No olvide verificar si la hora de su alarma ya ha pasado o no para evitar intentar establecer una alarma para un tiempo pasado, que la activará inmediatamente.
Consideremos otro caso: cuando apague su dispositivo, todas sus alarmas serán canceladas. Esto no le deja otra opción que configurarlos nuevamente al reiniciar. Para hacer eso, tendrá que usar un BroadcastReceiver.
This answer te ayudarán a saber cómo hacerlo. Simplemente recree su alarma en el método onReceive() de su BroadcastReceiver como se sugiere arriba.
Hola gracias por el trabajo ... Pero ¿cuál será el caso si no tengo actividad ... entonces mi receptor de transmisión completo no funcionará en ese caso (caso con la versión 3.0 de Android en adelante) ... Entonces, ¿cómo se puede pensar ... porque estoy trabajando en una aplicación así que no quieren ninguna actividad ... entonces cómo registrar ese receptor. – NullPointerException
Solo necesita usar etiquetas. Mira esto: http: //developer.android.com/guide/topics/manifest/receiver-element.html. Si está utilizando un servicio para crear su alarma, entonces necesita cambiar el nombre de la actividad anterior a su nombre de clase de servicio. –
Erol
¡Bien, está bien! esta es la mejor respuesta que tengo, ¡así que la recomiendo! – NullPointerException