Example #1
0
        public static void ScheduleBackgroundFetch()
        {
            //The interval has to be minimum 15 minutes.
            //Note that execution may be delayed because WorkManager is subject to OS battery optimizations,
            //such as doze mode.
            PeriodicWorkRequest.Builder periodicWorkRequestBuilder = new PeriodicWorkRequest.Builder(
                typeof(BackgroundFetchWorker),
                Conf.BACKGROUND_FETCH_REPEAT_INTERVAL_ANDROID);

            periodicWorkRequestBuilder
            //Start time is when the first time will be
            .SetPeriodStartTime(TimeSpan.FromSeconds(1))
            //If Result.InvokeRetry() is called it will linearly double the amount of time specified below before it tries again.
            .SetBackoffCriteria(BackoffPolicy.Linear, TimeSpan.FromSeconds(10))
            .SetConstraints(new Constraints.Builder()
                            //Only run if connected to the internet
                            .SetRequiredNetworkType(NetworkType.Connected)
                            .Build());

            PeriodicWorkRequest periodicWorkRequest = periodicWorkRequestBuilder.Build();

            WorkManager workManager = WorkManager.GetInstance(Platform.AppContext);

            workManager.EnqueueUniquePeriodicWork("exposurenotification",
                                                  ExistingPeriodicWorkPolicy.Keep,
                                                  periodicWorkRequest);
        }
Example #2
0
 private void InitMessagingCenterSubcription()
 {
     MessagingCenter.Subscribe <CalculatorWorkerRequested>(this, nameof(CalculatorWorkerRequested), message =>
     {
         WorkManager workManager            = WorkManager.GetInstance(Xamarin.Essentials.Platform.AppContext);
         PeriodicWorkRequest taxWorkRequest = PeriodicWorkRequest.Builder.From <CalculatorWorker>(TimeSpan.FromMinutes(15)).Build();
         workManager.EnqueueUniquePeriodicWork(nameof(CalculatorWorker), ExistingPeriodicWorkPolicy.Replace, taxWorkRequest);
     });
 }
Example #3
0
        public override void Schedule()
        {
            LoggerService.StartMethod();

            WorkManager workManager = WorkManager.GetInstance(Platform.AppContext);

            PeriodicWorkRequest periodicWorkRequest = CreatePeriodicWorkRequest();

            workManager.EnqueueUniquePeriodicWork(
                CURRENT_WORK_NAME,
                ExistingPeriodicWorkPolicy.Keep,
                periodicWorkRequest
                );

            LoggerService.EndMethod();
        }
        public Task Register(string taskName, string taskEntryPoint, DateTime startDateTime, TimeKind tKind, uint interval)
        {
            if (IsRegistered(taskName))
            {
                return(Task.CompletedTask);
            }

            try
            {
                DateTime nowNoSecond  = DateTime.ParseExact(DateTime.Now.ToString("dd-MM-yyyy HH:mm:00"), "dd-MM-yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
                uint     initialDelay = (uint)Math.Round((startDateTime - nowNoSecond).TotalMinutes, 0);

                uint timeInterval = interval;
                Java.Util.Concurrent.TimeUnit unit = Java.Util.Concurrent.TimeUnit.Minutes;
                switch (tKind)
                {
                case TimeKind.Minute:
                    unit = Java.Util.Concurrent.TimeUnit.Minutes;
                    break;

                case TimeKind.Hour:
                    unit = Java.Util.Concurrent.TimeUnit.Hours;
                    break;

                case TimeKind.Day:
                    unit = Java.Util.Concurrent.TimeUnit.Days;
                    break;

                case TimeKind.Month:
                    unit          = Java.Util.Concurrent.TimeUnit.Days;
                    timeInterval *= 30;
                    break;

                case TimeKind.Year:
                    unit          = Java.Util.Concurrent.TimeUnit.Days;
                    timeInterval *= 365;
                    break;

                default:
                    throw new Exception(string.Format("Categoria di tempo {0} non prevista", tKind));
                }

                PeriodicWorkRequest.Builder workRequestedBuilder;
                if (taskName.CompareTo(App.CheckPasswordBackgroundTaskName) == 0)
                {
                    workRequestedBuilder = PeriodicWorkRequest.Builder.From <CheckPasswordWorker>(timeInterval, unit);
                }
                else if (taskName.CompareTo(App.BackupBackgroundTaskName) == 0)
                {
                    workRequestedBuilder = PeriodicWorkRequest.Builder.From <BackupWorker>(timeInterval, unit);
                }
                else
                {
                    throw new Exception("Task not found");
                }

                Data data = new Data.Builder()
                            .PutLong("interval", unit.ToMinutes(timeInterval))
                            .Build();
                PeriodicWorkRequest workRequested = (PeriodicWorkRequest)workRequestedBuilder
                                                    .AddTag(taskName)
                                                    .SetInitialDelay(initialDelay, Java.Util.Concurrent.TimeUnit.Minutes)
                                                    .SetInputData(data)
                                                    .Build();
                AppWorkManager.EnqueueUniquePeriodicWork(taskName, ExistingPeriodicWorkPolicy.Replace, workRequested);
            }
            catch (Exception e)
            {
                Log.Error(Tag, string.Format("Error occurred during scheduling the work with name \"{0}\": {1}", taskName, e.Message));
            }
            return(Task.CompletedTask);
        }