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.