usando tutorial studio programar pendingintent notification developer alarma android service alarmmanager

tutorial - Android: ¿cómo programar un evento de transmisión alarmmanager que se llamará incluso si mi aplicación está cerrada?



tutorial alarmmanager (2)

Necesita utilizar un Service llamado Componente Android para esto. Desde el código de servicio puede programar su tarea usando el AlarmManager con PendingIntent Class por cada hora. Como su AlarmManger está declarado en los Componentes de servicio, no requiere ninguna GUI y se ejecutará en segundo plano, hasta que tenga batería en su dispositivo.

Mi aplicación necesita ejecutar una tarea específica cada hora. No importa si la aplicación está ejecutándose, suspendida o incluso cerrada.

Cuando la aplicación se está ejecutando o suspendida, puedo hacerlo simplemente programando un receptor de transmisión AlarmManager. Pero cuando la aplicación está cerrada, tengo que llamar a "unregisterReceiver" para no filtrar un intento, y la aplicación nunca se activará (o algo así) para procesar la tarea.

Entonces, la pregunta es: ¿cómo programar una tarea alarmmanager que no necesito anular el registro, por lo que se llamará incluso si mi aplicación está cerrada?


Use AlarmManager.setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation) para esto. Establezca el tipo en AlarmManager.RTC_WAKEUP para asegurarse de que el dispositivo se active si está inactivo (si ese es su requisito).

Algo como esto:

Intent intent = new Intent("com.foo.android.MY_TIMER"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE); long now = System.currentTimeMillis(); long interval = 60 * 60 * 1000; // 1 hour manager.setRepeating(AlarmManager.RTC_WAKEUP, now + interval, interval, pendingIntent); // Schedule timer for one hour from now and every hour after that

Usted pasa un PendingIntent a este método. No necesita preocuparse por la filtración de Intentos.

Recuerde apagar la alarma llamando a AlarmManager.cancel() cuando ya no lo necesite.

No registre un receptor en el código para esto. Simplemente agregue una etiqueta <intent-filter> a la entrada del manifiesto para su BroadcastReceiver, así:

<receiver android:name=".MyReceiver"> <intent-filter> <action android:name="com.foo.android.MY_TIMER"/> </intent-filter> </receiver>