Системное намерение на новые сутки
Необходимо сделать приёмник Broadcast, который будет реагировать или на начало новых суток, или на время 00:00, однако я не могу найти устраивающее этим критериям системного намерения. Заранее благодарен за помощь.
Ответы (1 шт):
К сожалению, на данный момент вы не можете запланировать работу на определенное время. Если у вас есть критичная по времени реализация, вам следует использовать AlarmManager для установки сигнала тревоги, который может срабатывать во время Doze Mode, используя setAndAllowWhileIdle() или setExactAndAllowWhileIdle().
Создание класса Worker:
public class MyWorker extends Worker {
@Override
public Worker.WorkerResult doWork() {
// Здесь вы будете выполнять вашу задачу
return WorkerResult.SUCCESS;
}
}
Вы можете запланировать OneTimeWorkRequest как на примере:
OneTimeWorkRequest mywork=
new OneTimeWorkRequest.Builder(MyWorker.class)
.setInitialDelay(<duration>, <TimeUnit>)// Use this when you want to add initial delay or schedule initial work to `OneTimeWorkRequest` e.g. setInitialDelay(2, TimeUnit.HOURS)
.build();
WorkManager.getInstance().enqueue(mywork);
Вы можете задать дополнительные настройки:
// Create a Constraints that defines when the task should run
Constraints myConstraints = new Constraints.Builder()
.setRequiresDeviceIdle(true)
.setRequiresCharging(true)
// Constraints.Builder Здесь есть много других настроек
.build();
И создать OneTimeWorkRequest, используя заданные настройки:
OneTimeWorkRequest mywork=
new OneTimeWorkRequest.Builder(MyWorker.class)
.setConstraints(myConstraints)
.build();
WorkManager.getInstance().enqueue(mywork);
Вы можете задавать периодичность ваших задач:
PeriodicWorkRequest periodicWork = new PeriodicWorkRequest.Builder(MyWorker.class, 12, TimeUnit.HOURS)
.build();
WorkManager.getInstance().enqueue(periodicWork);