コード例 #1
0
        private void SetupBackgroundUpdateJob()
        {
            var jobScheduler = (JobScheduler)activity.GetSystemService(Context.JobSchedulerService);

            var javaClass     = Java.Lang.Class.FromType(typeof(UpdateJob));
            var componentName = new ComponentName(activity, javaClass);

            var builder = new JobInfo.Builder(BACKGROUND_UPDATE_JOB_ID, componentName);

            JobInfo appBackgroundUpdateJob;

            if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
            {
                // 24+ requires minFlexMillis (5 minutes)
                appBackgroundUpdateJob = builder
                                         .SetPeriodic(JobInfo.MinPeriodMillis, JobInfo.MinFlexMillis)
                                         .SetPersisted(true)
                                         .Build();
            }
            else
            {
                appBackgroundUpdateJob = builder
                                         .SetPeriodic(Config.BackgroundUpdateIntervalMS)
                                         .SetPersisted(true)
                                         .Build();
            }

            jobScheduler.Schedule(appBackgroundUpdateJob);
        }
コード例 #2
0
ファイル: JobStarter.cs プロジェクト: utviklerapt/heiameg
        public static void SetupBackgroundUpdateJob(Activity activity)
        {
            var componentName = new ComponentName(activity, Java.Lang.Class.FromType(typeof(DownloadJob)));
            var builder       = new JobInfo.Builder(BACKGROUND_DOWNLOAD_JOB_ID, componentName);

            try
            {
                JobInfo backgroundJob;
                if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
                {
                    // 24+ requires minFlexMillis (1 hour)
                    backgroundJob = builder
                                    .SetPeriodic(Config.DownloadInterval, JobInfo.MinFlexMillis)
                                    .SetPersisted(true)
                                    .Build();
                }
                else
                {
                    backgroundJob = builder
                                    .SetPeriodic(Config.DownloadInterval)
                                    .SetPersisted(true)
                                    .Build();
                }

                var jobScheduler = (JobScheduler)activity.GetSystemService(Context.JobSchedulerService);
                jobScheduler.Schedule(backgroundJob);
            }
            catch (Exception e)
            {
                Crashes.TrackError(e);
            }
        }
コード例 #3
0
        public static void StartJob(Context context)
        {
            try
            {
                int jobId = 8;
                Log.Error(TAG, "startJob");

                JobScheduler jobScheduler = (JobScheduler)context.GetSystemService(Context.JobSchedulerService);

                var componentName = new ComponentName(context, Java.Lang.Class.FromType(typeof(WorkJobService)));

                var builder = new JobInfo.Builder(jobId, componentName).SetPersisted(true);

                // 小于7.0
                if (Build.VERSION.SdkInt < BuildVersionCodes.N)
                {
                    Log.Error(TAG, "每隔 1s 执行一次 job");
                    builder.SetPeriodic(1000);
                }
                else
                {
                    // 延迟执行任务
                    builder.SetMinimumLatency(1000);
                }

                int resultCode = jobScheduler.Schedule(builder.Build());
            }
            catch (Exception ex)
            {
                Log.Error(TAG, ex.Message);
            }
        }
コード例 #4
0
        public void ScheduleJob(View v)
        {
            JobInfo.Builder builder = new JobInfo.Builder(102, new ComponentName(this, Java.Lang.Class.FromType(typeof(JobScedulerSample))));
            builder.SetPersisted(true);
            builder.SetPeriodic(5000);
            builder.SetRequiredNetworkType(NetworkType.Unmetered);
            builder.SetRequiresCharging(false);
            builder.SetRequiresDeviceIdle(false);

            try
            {
                int test = Job_s.Schedule(builder.Build());
                if (test == JobScheduler.ResultSuccess)
                {
                    Console.WriteLine("Job is working");
                }
                else
                {
                    Console.WriteLine("Job is not working");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
コード例 #5
0
ファイル: AppWidget.cs プロジェクト: muak/XamarinWidgetSample
        public override void OnUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
        {
            System.Diagnostics.Debug.WriteLine("Widget OnUpdate");
            var me = new ComponentName(context, Java.Lang.Class.FromType(typeof(AppWidget)).Name);

            appWidgetManager.UpdateAppWidget(me, BuildRemoteViews(context, appWidgetIds));

            var scheduler = context.GetSystemService(Context.JobSchedulerService) as JobScheduler;

            var jobName = new ComponentName(context, Java.Lang.Class.FromType(typeof(WidgetJobService)).Name);
            var jobInfo = new JobInfo.Builder(1, jobName);

            jobInfo.SetBackoffCriteria(5000, BackoffPolicy.Linear);
            jobInfo.SetPersisted(true);
            jobInfo.SetPeriodic(900000);
            jobInfo.SetRequiredNetworkType(NetworkType.Any);
            jobInfo.SetRequiresCharging(false);

            var bundle = new PersistableBundle();

            bundle.PutIntArray(WIDGET_BUNDLE, appWidgetIds);

            jobInfo.SetExtras(bundle);

            var job = jobInfo.Build();

            scheduler.Schedule(job);
        }
コード例 #6
0
        /// <summary>
        ///     Schedules the task for execution.
        /// </summary>
        public void ScheduleTask(int interval)
        {
            if (!Mvx.IoCProvider.CanResolve <ISettingsManager>())
            {
                return;
            }

            if (!Mvx.IoCProvider.Resolve <ISettingsManager>().IsBackupAutouploadEnabled)
            {
                return;
            }

            var builder = new JobInfo.Builder(SYNC_BACK_JOB_ID,
                                              new ComponentName(
                                                  this, Java.Lang.Class.FromType(typeof(SyncBackupJob))));

            // convert hours into millisecond
            builder.SetPeriodic(60 * 60 * 1000 * interval);
            builder.SetPersisted(true);
            builder.SetRequiredNetworkType(NetworkType.NotRoaming);
            builder.SetRequiresDeviceIdle(false);
            builder.SetRequiresCharging(false);

            var tm     = (JobSchedulerType)GetSystemService(JobSchedulerService);
            var status = tm.Schedule(builder.Build());
        }
コード例 #7
0
ファイル: ClearPaymentsJob.cs プロジェクト: snehansh/MoneyFox
        /// <summary>
        ///     Schedules the task for execution.
        /// </summary>
        public void ScheduleTask()
        {
            var builder = new JobInfo.Builder(CLEAR_PAYMENT_JOB_ID,
                                              new ComponentName(
                                                  this, Java.Lang.Class.FromType(typeof(ClearPaymentsJob))));
            // Execute all 60 Minutes
            builder.SetPeriodic(60 * 60 * 1000);
            builder.SetPersisted(true);
            builder.SetRequiredNetworkType(NetworkType.None);
            builder.SetRequiresDeviceIdle(false);
            builder.SetRequiresCharging(false);

            var tm = (JobSchedulerType)GetSystemService(JobSchedulerService);
            tm.Schedule(builder.Build());
        }
コード例 #8
0
        public void ScheduleTask()
        {
            var builder = new JobInfo.Builder(RECURRING_PAYMENT_JOB_ID,
                                              new ComponentName(
                                                  this, Java.Lang.Class.FromType(typeof(SyncBackupJob))));

            // Execute all 30 Minutes
            builder.SetPeriodic(30 * 60 * 1000);
            builder.SetPersisted(true);
            builder.SetRequiredNetworkType(NetworkType.None);
            builder.SetRequiresDeviceIdle(false);
            builder.SetRequiresCharging(false);

            var tm     = (JobSchedulerType)GetSystemService(Context.JobSchedulerService);
            var status = tm.Schedule(builder.Build());
        }
コード例 #9
0
        /* UI onclick listener to schedule a job.What this job is is defined in
         * TestJobService#scheduleJob().
         */

        public void ScheduleJob()
        {
            var builder = new JobInfo.Builder(kJobId++, serviceComponent);


            //builder.SetMinimumLatency(periodInMins * 60 * 1000);
            builder.SetPeriodic((long)periodInMins * 60 * 1000);
            //builder.SetPersisted(true);
            //The service can wait up to an aditional 30 seconds before it must execute


            builder.SetRequiresDeviceIdle(false);
            builder.SetRequiresCharging(false);
            notificationService = new LocalNotificationJobService(mainContext);
            notificationService.ScheduleJob(builder.Build());
        }
        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");
        }
コード例 #11
0
        /// <summary>
        ///     Schedules the task for execution.
        /// </summary>
        public void ScheduleTask()
        {
            var builder = new JobInfo.Builder(RECURRING_PAYMENT_JOB_ID,
                                              new ComponentName(
                                                  this, Class.FromType(typeof(RecurringPaymentJob))));

            // Execute all 60 Minutes
            builder.SetPeriodic(JOB_INTERVAL);
            builder.SetPersisted(true);
            builder.SetRequiredNetworkType(NetworkType.None);
            builder.SetRequiresDeviceIdle(false);
            builder.SetRequiresCharging(false);

            var tm = (JobSchedulerType)GetSystemService(JobSchedulerService);

            tm.Schedule(builder.Build());
        }
コード例 #12
0
        public static void ScheduleUpdateNow(Context context)
        {
            var jobScheduler = context.GetSystemService(Java.Lang.Class.FromType(typeof(JobScheduler))) as JobScheduler;

            jobScheduler.CancelAll();
            var parameters = new PersistableBundle();

            parameters.PutLong("UserID", data.UserId);
            Console.WriteLine("UserID: " + data.UserId);
            var jobBuilder = new JobInfo.Builder(1, new ComponentName(context, Java.Lang.Class.FromType(typeof(UpdateService))));

            jobBuilder.SetPeriodic(Interval);
            var jobInfo = jobBuilder.SetExtras(parameters).Build();
            var result  = jobScheduler?.Schedule(jobInfo);

            Console.WriteLine("Scheduled a job. Result: " + result);
        }
コード例 #13
0
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);
            Button b = FindViewById <Button>(Resource.Id.button);

            b.Click += delegate
            {
                ComponentName   cn      = new ComponentName(this, Class.FromType(typeof(MyJobService)));
                JobInfo.Builder builder = new JobInfo.Builder(123, cn);

                long millis = 5 * 60 * 1000;
                builder.SetPeriodic(millis);

                JobScheduler js = (JobScheduler)GetSystemService(Context.JobSchedulerService);
                js.Schedule(builder.Build());
            };
        }
コード例 #14
0
        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);
            }
        }
コード例 #15
0
        private void StartService()
        {
            if (mJobScheduler != null)
            {
                // Thread.CurrentThread.CurrentCulture = new CultureInfo("bg-BG");
                CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("bg-BG");

                mJobScheduler = (JobScheduler)GetSystemService(Context.JobSchedulerService);
                JobScheduler  = new ComponentName(this, Java.Lang.Class.FromType(typeof(MyJobService)));

                JobInfo.Builder builder = new JobInfo.Builder(kJobId++, JobScheduler);

                builder.SetRequiredNetworkType(NetworkType.Any);
                builder.SetPeriodic(3600000); // 2400000  40 min, 7200000,  ////////////3600000
                // builder.SetPeriodic(900000); // 2400000  40 min,                  // 1500    20 000 - 2s  // 25 min
                builder.SetPersisted(true);

                mJobScheduler.Schedule(builder.Build());
            }
        }
コード例 #16
0
ファイル: KeepAlive.cs プロジェクト: dorisoy/XF.KeepAlive
        public static void StartJob(Context context)
        {
            Log.Error(TAG, "startJob");
            JobScheduler jobScheduler = (JobScheduler)context.GetSystemService(Context.JobSchedulerService);

            JobInfo.Builder builder = new JobInfo.Builder(8, new ComponentName(context.PackageName,
                                                                               typeof(WorkJobService).Name)).SetPersisted(true);

            // 小于7.0
            if (Build.VERSION.SdkInt < BuildVersionCodes.N)
            {
                builder.SetPeriodic(1000);
            }
            else
            {
                builder.SetMinimumLatency(1000);
            }

            jobScheduler.Schedule(builder.Build());
        }
コード例 #17
0
        private void Weatherupdatefrequency_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
        {
            long interval_minutes = int.Parse(Resources.GetStringArray(Resource.Array.listvaluesweatherupdatefrequency)[e.Position]);

            JobInfo.Builder jobBuilder = new JobInfo.Builder(56114281, new ComponentName(Application.Context, Java.Lang.Class.FromType(typeof(GrabWeatherJob))));
            jobBuilder.SetPersisted(true);
            jobBuilder.SetPeriodic(1000 * 60 * interval_minutes);
            jobBuilder.SetRequiredNetworkType(Android.App.Job.NetworkType.Unmetered);
            JobScheduler jobScheduler = (JobScheduler)Application.Context.GetSystemService(Context.JobSchedulerService);
            int          result       = jobScheduler.Schedule(jobBuilder.Build());

            if (result == JobScheduler.ResultSuccess)
            {
                Log.Info("LiveDisplay", "Job Result Sucess");
            }
            else
            {
                Log.Info("LiveDisplay", "Job Result Not Sucess");
            }
        }
コード例 #18
0
        /// <summary>
        ///     Schedules the task for execution.
        /// </summary>
        public void ScheduleTask(int interval)
        {
            if (!ServiceLocator.Current.GetInstance <ISettingsFacade>().IsBackupAutouploadEnabled)
            {
                return;
            }

            var builder = new JobInfo.Builder(SYNC_BACK_JOB_ID,
                                              new ComponentName(
                                                  this, Class.FromType(typeof(SyncBackupJob))));

            // convert hours into millisecond
            builder.SetPeriodic(JOB_INTERVAL * interval);
            builder.SetPersisted(true);
            builder.SetRequiredNetworkType(NetworkType.NotRoaming);
            builder.SetRequiresDeviceIdle(false);
            builder.SetRequiresCharging(false);

            var tm = (JobSchedulerType)GetSystemService(JobSchedulerService);

            tm.Schedule(builder.Build());
        }
コード例 #19
0
        public void ScheduleTask()
        {
            var settingsManager = Mvx.Resolve <ISettingsManager>();

            if (!settingsManager.IsBackupAutouploadEnabled)
            {
                return;
            }

            var builder = new JobInfo.Builder(SYNC_BACK_JOB_ID,
                                              new ComponentName(
                                                  this, Java.Lang.Class.FromType(typeof(SyncBackupJob))));

            // Execute all 30 Minutes
            builder.SetPeriodic(60 * 60 * 1000 * settingsManager.BackupSyncRecurrence);
            builder.SetPersisted(true);
            builder.SetRequiredNetworkType(NetworkType.NotRoaming);
            builder.SetRequiresDeviceIdle(false);
            builder.SetRequiresCharging(false);

            var tm     = (JobSchedulerType)GetSystemService(JobSchedulerService);
            var status = tm.Schedule(builder.Build());
        }
コード例 #20
0
ファイル: Util.cs プロジェクト: Gumi22/WADemo
        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());
        }
コード例 #21
0
ファイル: KeepAlive.cs プロジェクト: dorisoy/XF.KeepAlive
        public static void StartJob(Context context)
        {
            JobScheduler jobScheduler = (JobScheduler)context.GetSystemService(Context.JobSchedulerService);

            //setPersisted 在设备重启依然执行
            // 需要增加权限 RECEIVE_BOOT_COMPLETED
            JobInfo.Builder builder = new JobInfo.Builder(8, new ComponentName(context.PackageName,
                                                                               typeof(AliveJobService).Name)).SetPersisted(true);

            // 小于7.0
            if (Build.VERSION.SdkInt < BuildVersionCodes.N)
            {
                // 每隔 1s 执行一次 job
                // 版本23 开始 进行了改进,最小周期为 5s
                builder.SetPeriodic(1000);
            }
            else
            {
                // 延迟执行任务
                builder.SetMinimumLatency(1000);
            }
            jobScheduler.Schedule(builder.Build());
        }
コード例 #22
0
        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);
        }
コード例 #23
0
ファイル: JobHandlerService.cs プロジェクト: dorisoy/Wesley
        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();
            }
        }