private void RefreshJobs() { StopJobs(); if (settings != null && settings.EnableAndroidNotification) { CreateAutoJobNotificationChannel(); var jobServ = (JobScheduler)GetSystemService(JobSchedulerService); if (settings.AutoStopWifi.Count > 0 || settings.AutoStartCellur) { JobInfo.Builder jobBuilder = new JobInfo.Builder( TrojanPlusAutoJobService.JobId, new ComponentName(this, Class.FromType(typeof(TrojanPlusAutoJobService)).Name)); jobBuilder.SetRequiredNetworkType(NetworkType.Any); jobBuilder.SetBackoffCriteria(AutoJobServiceBackoffCriteria, BackoffPolicy.Linear); jobBuilder.SetMinimumLatency(AutoJobServiceMinimumLatency); jobBuilder.SetOverrideDeadline(AutoJobServiceMaxLatency); jobBuilder.SetPersisted(true); PersistableBundle bundle = new PersistableBundle(); bundle.PutString("settings", JsonConvert.SerializeObject(settings)); jobBuilder.SetExtras(bundle); var succ = jobServ.Schedule(jobBuilder.Build()); Log.Debug(TAG, "RefreshJobs TrojanPlusAutoJobService " + succ); } } }
public override void OnReceive(Context context, Intent intent) { if (intent.Action.Equals(Telephony.Sms.Intents.SmsReceivedAction)) { SmsMessage[] messages = Telephony.Sms.Intents.GetMessagesFromIntent(intent); IEnumerable <SmsData> smsDataList = ExtractMessages(messages); Intent mailIntent = new Intent(context, typeof(MailPushService)); string json = JsonConvert.SerializeObject(smsDataList); mailIntent.PutExtra("object", json); context.StartService(mailIntent); JobInfo.Builder builder = new JobInfo.Builder(TextPersistenceService.GetNewJobId(), new ComponentName(context, Java.Lang.Class.FromType(typeof(TextPersistenceService)))); PersistableBundle bundle = new PersistableBundle(); bundle.PutString("object", json); builder.SetExtras(bundle); builder.SetMinimumLatency(500); builder.SetOverrideDeadline(1000); JobInfo jobInfo = builder.Build(); JobScheduler jobScheduler = (JobScheduler)context.GetSystemService(Context.JobSchedulerService); jobScheduler.Schedule(jobInfo); } }
private void ShowLater(NotificationRequest notificationRequest) { if (notificationRequest.NotifyTime.HasValue == false) { return; } var triggerTime = NotifyTimeInMilliseconds(notificationRequest.NotifyTime.Value); notificationRequest.NotifyTime = null; var serializedNotification = ObjectSerializer <NotificationRequest> .SerializeObject(notificationRequest); var javaClass = Java.Lang.Class.FromType(typeof(ScheduledNotificationJobService)); var component = new ComponentName(Application.Context, javaClass); // Bundle up parameters var extras = new PersistableBundle(); extras.PutString(NotificationCenter.ExtraReturnNotification, serializedNotification); triggerTime -= NotifyTimeInMilliseconds(DateTime.Now); var builder = new JobInfo.Builder(notificationRequest.NotificationId, component); builder.SetMinimumLatency(triggerTime); // Fire at TriggerTime builder.SetOverrideDeadline(triggerTime + 5000); // Or at least 5 Seconds Later builder.SetExtras(extras); builder.SetPersisted(CheckBootPermission()); //Job will be recreated after Reboot if Permissions are granted var jobInfo = builder.Build(); _jobScheduler.Schedule(jobInfo); }
private void ShowLater(LocalNotification localNotification) { if (localNotification.NotifyTime.HasValue == false) { return; } var triggerTime = NotifyTimeInMilliseconds(localNotification.NotifyTime.Value); localNotification.NotifyTime = null; var serializedNotification = ObjectSerializer <LocalNotification> .SerializeObject(localNotification); var scheduled = false; if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) { var javaClass = Java.Lang.Class.FromType(typeof(ScheduledNotificationJobService)); var component = new ComponentName(Application.Context, javaClass); // Bundle up parameters var extras = new PersistableBundle(); extras.PutString(ExtraReturnNotification, serializedNotification); triggerTime -= NotifyTimeInMilliseconds(DateTime.Now); var builder = new JobInfo.Builder(localNotification.NotificationId, component); builder.SetMinimumLatency(triggerTime); // Fire at TriggerTime builder.SetOverrideDeadline(triggerTime + 5000); // Or at least 5 Seconds Later builder.SetExtras(extras); builder.SetPersisted(CheckBootPermission()); //Job will be recreated after Reboot if Permissions are granted var jobInfo = builder.Build(); var result = _jobScheduler.Schedule(jobInfo); scheduled = result == JobScheduler.ResultSuccess; } if (scheduled) { return; } // The job was not scheduled. So use the old implementation var notificationIntent = new Intent(Application.Context, typeof(ScheduledNotificationReceiver)); notificationIntent.SetAction("LocalNotifierIntent" + localNotification.NotificationId); notificationIntent.PutExtra(ExtraReturnNotification, serializedNotification); var pendingIntent = PendingIntent.GetBroadcast(Application.Context, 0, notificationIntent, PendingIntentFlags.CancelCurrent); _alarmManager.Set(AlarmType.RtcWakeup, triggerTime, pendingIntent); }
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"); }
// todo p238-239 schedule location job service public void StartTracking() { var javaClass = Java.Lang.Class.FromType(typeof(LocationJobService)); var componentName = new ComponentName(Application.Context, javaClass); var jobBuilder = new JobInfo.Builder(1, componentName); jobBuilder.SetOverrideDeadline(1000); jobBuilder.SetPersisted(true); jobBuilder.SetRequiresDeviceIdle(false); jobBuilder.SetRequiresBatteryNotLow(true); var jobInfo = jobBuilder.Build(); var jobScheduler = (JobScheduler)Application.Context.GetSystemService(Context.JobSchedulerService); jobScheduler.Schedule(jobInfo); }
public void StartJob() { try { //Supports After APi level 21 only if (Build.VERSION.SdkInt < BuildVersionCodes.Lollipop) { return; } ComponentName serviceComponent = new ComponentName(ActivtyContext, Java.Lang.Class.FromType(typeof(DataLoaderJobService))); if (Build.VERSION.SdkInt >= BuildVersionCodes.N) { Jobbuilder = new JobInfo.Builder(Jobid, serviceComponent); Jobbuilder.SetMinimumLatency(4000); Jobbuilder.SetRequiredNetworkType(NetworkType.Any); Jobbuilder.SetRequiresCharging(false); Jobbuilder.SetOverrideDeadline(4000); Jobbuilder.SetBackoffCriteria(3000, BackoffPolicy.Linear); Jobbuilder.SetPersisted(true); } else { Jobbuilder = new JobInfo.Builder(Jobid, serviceComponent); Jobbuilder.SetPeriodic(2000); Jobbuilder.SetPersisted(true); Jobbuilder.SetRequiredNetworkType(NetworkType.Any); Jobbuilder.SetRequiresCharging(false); } Jobscheduler = (JobScheduler)ActivtyContext.GetSystemService(Context.JobSchedulerService); int result = Jobscheduler.Schedule(Jobbuilder.Build()); if (result == JobScheduler.ResultSuccess) { } } catch (Exception e) { Crashes.TrackError(e); } }
public void ScheduleJob(View v) { if (!EnsureTestService()) { return; } var builder = new JobInfo.Builder(kJobId++, serviceComponent); var delay = delayEditText.Text; if (delay != null && !TextUtils.IsEmpty(delay)) { builder.SetMinimumLatency(long.Parse(delay) * 1000); } var deadline = deadlineEditText.Text; if (deadline != null && !TextUtils.IsEmpty(deadline)) { builder.SetOverrideDeadline(long.Parse(deadline) * 1000); } bool requiresUnmetered = wiFiConnectivityRadioButton.Checked; bool requiresAnyConnectivity = anyConnectivityRadioButton.Checked; if (requiresUnmetered) { builder.SetRequiredNetworkType(NetworkType.Unmetered); } else if (requiresAnyConnectivity) { builder.SetRequiredNetworkType(NetworkType.Any); } builder.SetRequiresDeviceIdle(requiresIdleCheckbox.Checked); builder.SetRequiresCharging(requiresChargingCheckBox.Checked); testService.ScheduleJob(builder.Build()); }
public static void ScheduleJob(Context context) { Debug.WriteLine(typeof(BackgroundDataLoaderJobService)); var javaClass = Java.Lang.Class.FromType(typeof(BackgroundDataLoaderJobService)); var jobBuilder = new JobInfo.Builder(1, new ComponentName(context, javaClass)) .SetRequiredNetworkType(NetworkType.NotRoaming); if (Build.VERSION.SdkInt >= BuildVersionCodes.N) { Debug.WriteLine("Service min period: " + JobInfo.MinPeriodMillis); jobBuilder.SetPeriodic(3600000, 10000); // => 60 min +/- 10 Seconds } else { jobBuilder.SetMinimumLatency(3595000); // min => 59 min 55 Seconds jobBuilder.SetOverrideDeadline(3605000); // max => 60 min 05 Seconds } Debug.WriteLine("Starting Job"); JobScheduler scheduler = context.GetSystemService(Context.JobSchedulerService) as JobScheduler; scheduler?.Schedule(jobBuilder.Build()); }
private void StartJob(Context context, Intent implicitIntent) { try { this.mJobScheduler = (JobScheduler)this.GetSystemService(Context.JobSchedulerService); this.mJobScheduler.Cancel(this.jobId); if (this.jobId != -1) { this.mJobScheduler.Cancel(this.jobId); } jobId = 100; if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) { ComponentName component = null; PackageManager pm = context.PackageManager; //查出所有的能匹配这个隐式意图的服务列表 var resolveInfo = pm.QueryIntentServices(implicitIntent, 0); if (resolveInfo != null || resolveInfo.Count == 1) { ResolveInfo serviceInfo = resolveInfo[0]; //取出包名 string packageName = serviceInfo.ServiceInfo.PackageName; //取出服务名 string className = serviceInfo.ServiceInfo.Name; //用包名和服务名来创建一个ComponentName对象 component = new ComponentName(packageName, className); } if (component != null) { var builder = new JobInfo.Builder(this.jobId, component); //24 if (Build.VERSION.SdkInt >= BuildVersionCodes.N) { //7.0以上延迟3s执行 builder.SetMinimumLatency(30000L); ////执行的最小延迟时间 builder.SetOverrideDeadline(30000L); ////执行的最长延时时间 builder.SetMinimumLatency(30000L); builder.SetBackoffCriteria(30000L, 0); //线性重试方案 } else { //每隔3s执行一次job builder.SetPeriodic(30000L); } builder.SetRequiredNetworkType(NetworkType.Any); // 当插入充电器,执行该任务 builder.SetRequiresCharging(true); builder.SetPersisted(true); this.mJobScheduler.Schedule(builder.Build()); } } } catch (Java.Lang.Exception ex) { ex.PrintStackTrace(); } }
public void ScheduleJob (View v) { if (!EnsureTestService ()) { return; } var builder = new JobInfo.Builder (kJobId++, serviceComponent); var delay = delayEditText.Text; if (delay != null && !TextUtils.IsEmpty (delay)) { builder.SetMinimumLatency (long.Parse (delay) * 1000); } var deadline = deadlineEditText.Text; if (deadline != null && !TextUtils.IsEmpty (deadline)) { builder.SetOverrideDeadline (long.Parse (deadline) * 1000); } bool requiresUnmetered = wiFiConnectivityRadioButton.Checked; bool requiresAnyConnectivity = anyConnectivityRadioButton.Checked; if (requiresUnmetered) { builder.SetRequiredNetworkCapabilities (NetworkTypeValue.Unmetered); } else if (requiresAnyConnectivity) { builder.SetRequiredNetworkCapabilities (NetworkTypeValue.Any); } builder.SetRequiresDeviceIdle (requiresIdleCheckbox.Checked); builder.SetRequiresCharging (requiresChargingCheckBox.Checked); testService.ScheduleJob (builder.Build ()); }
public static bool scheduleJob(Context ctx, JobCallbacks callbacks, TimeSpan?minLatency, TimeSpan?maxLatency, TimeSpan?interval = null, bool requireIdle = false, bool requireCharger = false, NetworkType requiredNet = NetworkType.Any, bool requireAboveLowBattery = false, bool requireAboveLowStorage = false) { int jobID = -1; bool success = false; jobID = callbacks.JobUniqueID; allJobs.Add(jobID, callbacks); try { ComponentName JobServiceComponent = new ComponentName(ctx, Java.Lang.Class.FromType(typeof(PeriodicTask))); var jobBuilder = new JobInfo .Builder(jobID, JobServiceComponent) .SetRequiresDeviceIdle(requireIdle) .SetRequiresCharging(requireCharger) .SetRequiredNetworkType(requiredNet) .SetRequiresBatteryNotLow(requireAboveLowBattery) .SetRequiresStorageNotLow(requireAboveLowStorage) ; long intervalMillisecond = (long)(interval?.TotalMilliseconds ?? 0); if (intervalMillisecond > 0L) { if (intervalMillisecond < JobInfo.MinPeriodMillis) { throw new Exception("Period interval must be at least: " + JobInfo.MinPeriodMillis); } jobBuilder.SetPeriodic(intervalMillisecond); } else { jobBuilder.SetMinimumLatency((long)(minLatency?.TotalMilliseconds ?? 0L)); jobBuilder.SetOverrideDeadline((long)(maxLatency?.TotalMilliseconds ?? 0L)); } JobInfo job = jobBuilder.Build(); var manager = (JobSchedulerType)ctx.GetSystemService(Context.JobSchedulerService); var status = manager.Schedule(job); if (status != JobSchedulerType.ResultSuccess) { AndroidLevelLogger.e(TAG, "Job schedule failed for id: " + jobID); success = false; } else { success = true; } } catch (Exception ex) { AndroidLevelLogger.e(TAG, ex); } if (!success && allJobs.ContainsKey(jobID)) { allJobs.Remove(jobID); } return(success); }