android android-jetpack android-workmanager

android - ¿Cómo programar notificaciones utilizando WorkManager?



android-jetpack android-workmanager (4)

Como ianhanniballake declaró

WorkManager no es apropiado para el trabajo que debe realizarse en un momento determinado.

Pero esto se puede configurar en un futuro cercano de la hora exacta, dependiendo del estado de la optimización de la batería.

Una solución será como:

// Time to show notification at LocalDateTime timeAt = LocalDate.now().atTime(20, 0); LocalDateTime timeNow = LocalDateTime.now(); OneTimeWorkRequest.Builder workBuilder = new OneTimeWorkRequest.Builder(NotificationWorker.class); // I just need to set an delay here workBuilder.setInitialDelay(Duration.between(timeNow, timeAt)); // This is just to complete the example WorkManager.getInstance().enqueueUniqueWork(UNIQUE_WORK_SHOW_NOTIFICATION, ExistingWorkPolicy.REPLACE, workBuilder.build());

Quiero programar una notificación cada vez que el usuario agregue una nota en la base de datos durante un tiempo específico. Si bien hay varias formas de hacerlo con AlarmManager, BroadcastReceiver, etc. ¿Cómo se puede hacer con WorkManager?


De acuerdo con la documentación oficial de Android sobre el administrador de trabajadores: "Estas API le permiten crear una tarea y entregarla a WorkManager para que se ejecute inmediatamente o en el momento adecuado". En mi aplicación, configuro un trabajo para que se active 20 segundos después de:

// Schedule the time val request= OneTimeWorkRequestBuilder<YourWork>().setInitialDelay(20, TimeUnit.SECONDS).build() WorkManager.getInstance().enqueue(request)


Puede mostrar notificaciones con la ayuda de workmanager. Workmanger se puede usar para programar tareas de ocurrencia única o periódica, así como también podemos programar tareas en un momento determinado.

OneTimeWorkRequest request= new OneTimeWorkRequest.Builder(CustomWorkerClass.class) .setInitialDelay(delayedTime, TimeUnit.MILLISECONDS) .addTag("TAG") .build();

''delayedTime'' -> calcula el tiempo cuando se activa la notificación

Para más detalles de implementación, haga clic aquí . Para leer más sobre Workmanager haga clic aquí.


WorkManager no es apropiado para el trabajo que debe realizarse en un momento determinado.

Debe usar AlarmManager , y específicamente AlarmManagerCompat.setExactAndAllowWhileIdle() , para obtener una devolución de llamada en un momento específico.