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); }