Tengo un problema con AlarmManager, configuro el código para programar una alarma de repetición y después de ejecutar la aplicación, la alarma funciona bien. Incluso si hago clic en el botón de Inicio (y la aplicación está en pausa), la alarma aún se ejecuta en su intervalo.La alarma de Android se cancela después de cerrar la aplicación
El problema es que si abro el Administrador de tareas y fuerzo a cerrar la aplicación, la alarma deja de ejecutarse.
¿Es este un comportamiento normal, hay alguna forma de evitar esto y mantener la alarma en funcionamiento después de cerrar la aplicación?
El código está debajo - el método es llamado por la clase ApplicationContext, onCreate(). código
private void scheduleAlarm() {
if (alarmScheduled == true) { return; } // we only need to schedule once.
int alarmInterval = Def.pref(getApplicationContext()).getInt("alarmInterval", 30);
final Intent intent = new Intent(getApplicationContext(), CollectorAlarmReceiver.class);
final PendingIntent pending = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
AlarmManager alarmMgr = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmMgr.cancel(pending); // cancel others.
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+1000,
alarmInterval*1000, pending);
Def.log(TAG,"scheduleAlarm(): alarm scheduled, interval: "+alarmInterval+" seconds");
alarmScheduled = true;
}
receptor:
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "CollectorAlarmReceiver invoked, starting CollectorService in background");
context.startService(new Intent(context, CollectorService.class));
Intent collectorService = new Intent(context,CollectorService.class);
collectorService.putExtra("action", CollectorService.ACTION_BACKGROUND_REQUEST_MESSAGES);
context.sendBroadcast(collectorService);
}
Gracias!
¿Se puede publicar el código de su receptor y un ejemplo de lo que sería AlarmInterval? – ninjasense
Publiqué el código para Receiver. El interval de alarma es de 30 segundos. Puede ver que hay un Log in the onReceive, entonces puedo rastrear cuando se invoca Receiver. Y al ejecutar la aplicación, funciona bien, el problema es cuando está cerrado. –
¿Por qué no configura una alarma en el reloj predeterminado del sistema? Luego, elimínelo mediante el administrador de tareas y vea si se comporta como su aplicación. Si tampoco puede alarmarte. Creo que está bien para su aplicación y no necesita hacer nada. –