Todo lo que necesitas saber sobre c贸mo agregar notificaciones con Alarm Manager en Android | de Naman Garg | septiembre 2022

Foto de Daria Nepriakhina 馃嚭馃嚘 en UnsplashAndroid tiene una funci贸n que te permite programar notificaciones para m谩s tarde. Esto es 煤til si los usuarios/desarrolladores necesitan hacer algo m谩s tarde. Por ejemplo, si desea que se le recuerde al usuario una tarea que estableci贸 en una futura aplicaci贸n de lista de tareas. Este blog usa AlarmManager y Broadcast Receiver para lograr lo mismo en Android API Nivel 26 o superior.

Nota 鈫 No utilizaremos la API de WorkManager para programar alertas, ya que las alertas son un caso de uso especial y no forman parte del trabajo en segundo plano. AlarmManager tambi茅n es la forma recomendada de ejecutar trabajos con precisi贸n de tiempo.

Paso 1: configurar la clase de datos:Debido a que us茅 esta clase de datos con RoomDatabase, se anota con Entity, pero no es necesaria de otra manera. Pero lo principal es el campo ID, que es una clave principal y se usar谩 m谩s adelante para configurar varias notificaciones a la vez.Paso 2. Configure la clase BroadcastReceiver:Nuestro AlarmManager llamar谩 a esta clase en alg煤n momento en el futuro y esta clase activar谩 la notificaci贸n en ese momento. Necesitamos agregar la notificaci贸n dentro de esta clase. Algunas cosas importantes a tener en cuenta al agregar una notificaci贸n son:

  1. setContentIntent() = Necesita una intenci贸n pendiente que se activar谩 cuando un usuario toque la notificaci贸n. PendingIntent necesita cuatro par谩metros aqu铆, a saber, Contexto, RequestCode, Intent y Flag. Aseg煤rese de agregar una de las banderas como FLAG_IMMUTABLE, ya que las API m谩s recientes lo requieren.
  2. setAutoCancel() = Determina si la notificaci贸n desaparecer谩 o no cuando el usuario la toque.
  3. tapResultIntent.flags = Aseg煤rate de agregar el indicador de intenci贸n como quieras. Uso FLAG_ACTIVITY_SINGLE_TOP porque esta aplicaci贸n usa un modelo de fragmentos m煤ltiples de actividad 煤nica y, en cualquier caso, solo MainActivity existe en la parte superior de la pila y cuando un usuario toca la notificaci贸n mientras la aplicaci贸n est谩 en primer plano, no se crean nuevas instancias de la actividad.
  4. NotificationCompat.Builder() = El contexto y la identificaci贸n del canal se usan como par谩metros y debemos asegurarnos de que la identificaci贸n del canal sea la misma que la identificaci贸n del canal que usaremos m谩s adelante para crear el canal de notificaci贸n.

Esta clase aqu铆 obtiene el objeto taskInfo como intenci贸n de mostrar la descripci贸n de la notificaci贸n como taskInfo.description y realizar algunas tareas m谩s tarde cuando agregamos un bot贸n de acci贸n a la notificaci贸n. Adem谩s, no olvide agregar esta clase en el archivo de manifiesto.Paso 3: Configure la alarmaUsaremos el m茅todo setAlarmClock() para configurar una alarma, ya que descubr铆 que es el m谩s confiable en el futuro al configurar varias alarmas. Hay varios m茅todos para configurar una alarma, como

  1. ajustado a()
  2. establecerExacto()
  3. setInExactRepeating()
  4. establecerRepetir()
  5. Establece el tiempo()
  6. establecerZonaHora()
  7. establecer y permitir mientras est谩 inactivo ()
  8. setExactAndAllowWhileIdle()
  9. establecerVentana()

En la funci贸n setAlarm(taskInfo: TaskInfo), primero creamos una instancia del administrador de alarmas y luego establecemos una intenci贸n pendiente para abrir la clase AlarmReciver en el futuro, que luego activa la notificaci贸n. Tenga en cuenta que usamos taskInfo.id como RequestCode, lo que garantiza que tengamos un RequestCode diferente para cada alerta y, por lo tanto, podamos crear m煤ltiples alertas con m煤ltiples notificaciones.Algunas cosas sobre setAlarmClock() 鈥Con este m茅todo, el 铆cono de alarma aparece en la barra de estado del usuario como si hubiera configurado una alarma usando la aplicaci贸n de alarma integrada de su dispositivo, y cuando el usuario abre completamente su notificaci贸n, ve la hora de la alarma. Tocar la hora de la alarma en la notificaci贸n activa el PendingIntent que especificamos en el objeto AlarmClockInfo, que aqu铆 es basicPendingIntent. Al configurar cualquier alarma exacta, debemos agregar el permiso SCHEDULE_EXACT_ALARM en el archivo de manifiesto para las API m谩s recientes.Paso 4: crea el canal de notificaci贸nA partir de Android 8.0 (nivel de API 26), todas las notificaciones deben asignarse a un canal. Por ejemplo, aqu铆 podemos crear tres canales para diferentes tareas prioritarias establecidas por los usuarios, tales como: B. bajo, medio y alto, cada uno con diferente imagen y sonido. NotificationChannel requiere 3 par谩metros (channel_id, channel_name, prioridad). channel_id debe ser diferente para cada canal y channel_name debe describir informaci贸n b谩sica sobre el canal que el usuario puede ver en la informaci贸n de la aplicaci贸n. Solo necesita configurarse una vez y puede llamarse dentro del m茅todo onCreate().Paso 5: Cancelar la alarma (Opcional)Imaginemos que tenemos una alarma programada para una tarea que el usuario quiere hacer, pero resulta que el usuario la ha hecho mucho antes. En tal caso tenemos que apagar la alarma. Es muy f谩cil cancelar la alarma, pero debe asegurarse de que el PendingIntent utilizado para cancelarla debe coincidir con el PendingIntent que usamos para configurar la alarma; de lo contrario, no se cancelar谩. No es necesario pegar el mismo contenido en la intenci贸n utilizada anteriormente, ya que el contenido dentro de la intenci贸n no coincide al comparar las intenciones pendientes. (por ejemplo, intenci贸n.putExtra)Paso 6: agregue alarmas al reiniciar el dispositivoDe forma predeterminada, cuando un dispositivo se apaga, todas las alarmas se cancelan. Para evitar esto, debemos dise帽ar nuestra aplicaci贸n para restablecer autom谩ticamente la alarma cuando el usuario reinicia el dispositivo. Esto asegura que AlarmManager contin煤e funcionando sin que el usuario tenga que reiniciar la alarma. Necesitamos agregar una clase de receptor de transmisi贸n que recibir谩 una transmisi贸n cada vez que se reinicie el dispositivo. Aqu铆 obtenemos la lista de todas las alarmas activas usando nuestro repositorio y volvemos a poner las alarmas en esta clase. Adem谩s, debemos agregar el permiso RECEIVE_BOOT_COMPLETED en el archivo de manifiesto de Android junto con la clase RebootBroadcastReceiver y sus filtros de intenci贸n. Estos filtros de intenci贸n permiten recibir la transmisi贸n cuando el dispositivo se reinicia o se enciende.

Nota: para los tel茅fonos m贸viles m谩s nuevos, debe activar manualmente la funci贸n de inicio autom谩tico en Informaci贸n de la aplicaci贸n 鈫 Administraci贸n de la bater铆a 鈫 Inicio autom谩tico para que reciba la transmisi贸n RECEIVE_BOOT_COMPLETED. Inicialmente est谩 apagado por motivos de gesti贸n de la bater铆a. B谩sicamente, permite que su aplicaci贸n se inicie autom谩ticamente cuando recibe la transmisi贸n.

Paso 7Agregar bot贸n de acci贸n (opcional)Digamos que un usuario recibe la notificaci贸n de una tarea y la complet贸. En este caso, el usuario quiere hacer clic en el bot贸n 芦Finalizar/Completado禄 para que pueda eliminarse de la cola de tareas incompletas. Ahora agreguemos un bot贸n de acci贸n para completar una tarea. Aqu铆 no abriremos una actividad cuando el usuario toque el bot贸n, pero haremos algo de trabajo en segundo plano. Para hacer esto, necesitamos agregar algo de c贸digo a la clase AlarmReceiver que creamos anteriormente y agregar otra clase de receptor de transmisi贸n que recibir谩 la transmisi贸n para realizar una acci贸n cuando se complete una tarea. Dentro de la clase AlarmReceiver, debemos agregar otra intenci贸n pendiente que sea responsable de abrir la clase OnCompletedBroadcastReceiver. Esta clase recibe el objeto taskInfo cuando el usuario toca el bot贸n de acci贸n y cambia su estado a verdadero cuando la tarea se completa y la actualiza en el espacio de la base de datos con el repositorio. Agregue tambi茅n esta clase en el archivo AndroidManifest.xml.

Deja una respuesta

Tu direcci贸n de correo electr贸nico no ser谩 publicada.