private void RunDuringNextWindowIfNotAlreadyScheduled(Context context, Intent intent)
        {
            JobScheduler jobScheduler = (JobScheduler)context.GetSystemService(Context.JobSchedulerService);

            // don't queue another job if there's already one in the pending job queue
            if (jobScheduler.AllPendingJobs.Any(x => x.Id == RUN_DURING_NEXT_WINDOW))
            {
                Log.Info(TAG, "Another device location update job will not be scheduled because an existing job was found in the queue.");

                return;
            }

            var job = new JobInfo.Builder(RUN_DURING_NEXT_WINDOW, new ComponentName(context, Java.Lang.Class.FromType(typeof(UpdateDeviceLocationJobService))));

            var oneMinute   = 1 * 60 * 1000;
            var twoMinutes  = 2 * 60 * 1000;
            var fiveMinutes = 5 * 60 * 1000;

            job.SetMinimumLatency(oneMinute);            // Specify that this job should be delayed by the provided amount of time (in milliseconds)
            job.SetTriggerContentMaxDelay(twoMinutes);   // Set the maximum total delay (in milliseconds) that is allowed
            //job.SetPeriodic(fiveMinutes);              // Specify that this job should recur with the provided interval, not more than once per period.
            //job.SetPersisted(true);

            var result = jobScheduler.Schedule(job.Build());

            LogScheduleResult(result);
        }
        public void SchedulePeriodicWork()
        {
            JobScheduler jobScheduler = (JobScheduler)Xamarin.Forms.Forms.Context.GetSystemService(Context.JobSchedulerService);
            var          jobBuilder   = new JobInfo.Builder(JobId, new ComponentName(Xamarin.Forms.Forms.Context, Java.Lang.Class.FromType(typeof(ExampleJobService))));

            jobBuilder.SetPeriodic(TimeSpan.FromMinutes(3).Milliseconds);
            jobBuilder.SetOverrideDeadline(TimeSpan.FromMinutes(1).Milliseconds);
            jobBuilder.SetMinimumLatency(TimeSpan.FromMinutes(1).Milliseconds);
            jobBuilder.SetTriggerContentMaxDelay(TimeSpan.FromMinutes(1).Milliseconds);

            var job    = jobBuilder.Build();
            var result = jobScheduler.Schedule(job);

            MessagingCenter.Send <XamarinBGServ.App, string>(Xamarin.Forms.Application.Current as XamarinBGServ.App,
                                                             Messages.ConsoleMessage, result == JobScheduler.ResultSuccess ? "Job scheduled" : "Job scheduling failed");
        }
        private void RunImmediately(Context context, Intent intent)
        {
            JobScheduler jobScheduler = (JobScheduler)context.GetSystemService(Context.JobSchedulerService);

            // don't queue another job if there's already one in the pending pjob queue
            if (jobScheduler.AllPendingJobs.Any(x => x.Id == RUN_IMMEDIATELY))
            {
                Log.Info(TAG, "Another device location update job will not run because an existing job was found in the queue.");

                return;
            }

            var job = new JobInfo.Builder(RUN_IMMEDIATELY, new ComponentName(context, Java.Lang.Class.FromType(typeof(UpdateDeviceLocationJobService))));

            job.SetMinimumLatency(100);
            job.SetTriggerContentMaxDelay(1000);

            var result = jobScheduler.Schedule(job.Build());

            LogScheduleResult(result);
        }