Periodi c Запрос на работу выполняется немедленно - Xamarin - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь создать уведомление, которое будет запускаться по расписанию. Я хочу, чтобы уведомление показывалось один раз в день в установленное время (не обязательно). Итак, я пытаюсь создать PeriodicWorkRequest, который запускается каждые 24 часа, и отложить начало рабочего запроса до времени дня, когда я хочу, чтобы он выполнялся. Я могу запустить его по расписанию, но всякий раз, когда я его создаю, он запускается сразу же. Я нашел несколько вопросов, в которых говорится, что вы можете использовать .setInitialDelay () в построителе, однако это, похоже, недоступно в API Xamarin Work Manager. Я также пробовал .SetPeriodStartTime () в классе Builder после нахождения метода в определении класса Builder, но это, похоже, ни на что не влияет.

            MessagingCenter.Subscribe<StartNotificationRemindersMessage>(this, "StartNotificationRemindersMessage", message => {
                TimeSpan startDelay = DateTime.Now.AddMinutes(2) - DateTime.Now;

                PeriodicWorkRequest notificationsWorkRequest = PeriodicWorkRequest.Builder.From<NotificationsWorker>(1, TimeUnit.Days).SetPeriodStartTime(startDelay).Build();
                WorkManager.Instance.Enqueue(notificationsWorkRequest);
            });

Здесь я создаю периодi c запрос на работу и пытается добавить 2-х минутную задержку к запуску.

А вот класс NotificationsWorker.

    class NotificationsWorker : Worker
    {
        public NotificationsWorker(Context context, WorkerParameters workerParameters) : base(context, workerParameters)
        {

        }
        public override Result DoWork()
        {
            CrossLocalNotifications.Current.Show("GCS Reminder", "Testing reminder notifications");
            return Result.InvokeSuccess();
        }
    }

Если кто-то может показать мне, что я делаю не так, был бы очень признателен.

Спасибо!

1 Ответ

0 голосов
/ 23 июля 2020

Существует метод расширения с именем SetPeriodStartTime. Крайне сложно найти какую-либо документацию по нему, но я экспериментировал с ним, и, похоже, это помогло.

Например

   PeriodicWorkRequest workRequest = PeriodicWorkRequest.Builder
     .From<YourWorkerClass>(repeatInterval, flexInterval)
     .SetPeriodStartTime(TimeSpan.FromHours(1))
     .Build();
...