I have a WorkManager in my mainactivity:
private void startwork() {
PeriodicWorkRequest work = new PeriodicWorkRequest.Builder(AlarmReceiver.class, 16, TimeUnit.MINUTES)
.setConstraints(Constraints.NONE)
.build();
WorkManager.getInstance(MainActivity.this)
.enqueueUniquePeriodicWork("workname", ExistingPeriodicWorkPolicy.REPLACE, work);
}
I'd like to play an alert every 16 minutes. The problem is everytime user start the app it will show one alert immediately, I'd like to show the alerts only after 16 minutes the user open the app.
public Result doWork() {
notify();
}
Any ideas how to avoid this alert all the time that user opens the app, I'd like just to reschedule it to 16 minutes from now.
The builder has a function setInitialDelay
, call it as such. The default constraint is already Constraints.NONE
, so setting it again has no result.
private void startwork() {
PeriodicWorkRequest work = new PeriodicWorkRequest.Builder(AlarmReceiver.class, 16, TimeUnit.MINUTES)
.setInitialDelay(16, TimeUnit.MINUTES)
.build();
WorkManager.getInstance(MainActivity.this)
.enqueueUniquePeriodicWork("workname", ExistingPeriodicWorkPolicy.REPLACE, work);
}
As a worried potential user: do you really want to sent a notification every 16 minutes?
You should use setInitialDelay
and if you use ExistingPeriodicWorkPolicy.REPLACE
when app runs it will replace your previous worker use ExistingPeriodicWorkPolicy.KEEP
instead.
PeriodicWorkRequest work = new PeriodicWorkRequest.Builder(AlarmReceiver.class, 16, TimeUnit.MINUTES)
.setInitialDelay(16, TimeUnit.MINUTES)
.build();
WorkManager.getInstance(MainActivity.this)
.enqueueUniquePeriodicWork("workname", ExistingPeriodicWorkPolicy.KEEP, work);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With