@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); JobScheduler jobs= (JobScheduler)getSystemService(JOB_SCHEDULER_SERVICE); ComponentName cn=new ComponentName(this, LongJobService.class); JobInfo.Builder b=new JobInfo.Builder(JOB_ID, cn) .setMinimumLatency(30000) .setOverrideDeadline(60000) .setPersisted(false) .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) .setRequiresCharging(false) .setRequiresDeviceIdle(false); jobs.schedule(b.build()); Toast.makeText(this, R.string.msg_start, Toast.LENGTH_LONG).show(); finish(); } }
.setPersisted(true) // This makes it restart after reboot .setExtras(new PersistableBundle()) .setMinimumLatency(millisToNextJobStart) .setOverrideDeadline(millisToNextJobStart).build(); int error = jobScheduler.schedule(immediateJob);
@SuppressLint("SwitchIntDef") @Override public void request(SchedulerConstraint constraint) { JobScheduler jobScheduler = getJobScheduler(); final int id = createId(); JobInfo.Builder builder = new JobInfo.Builder(id, getComponentName()) .setExtras(toPersistentBundle(constraint)) .setPersisted(true); switch (constraint.getNetworkStatus()) { case NetworkUtil.UNMETERED: builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED); break; case NetworkUtil.METERED: builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); break; default: builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_NONE); builder.setRequiresDeviceIdle(true); break; } if (constraint.getDelayInMs() > 0) { builder.setMinimumLatency(constraint.getDelayInMs()); } if (constraint.getOverrideDeadlineInMs() != null) { builder.setOverrideDeadline(constraint.getOverrideDeadlineInMs()); } int scheduled = jobScheduler.schedule(builder.build()); JqLog.d("[FW Scheduler] scheduled a framework job. Success? %s id: %d" + " created id: %d", scheduled > 0, scheduled, id); }
public static void scheduleJob(Context context, int max, boolean recurring) { ComponentName serviceComponent = new ComponentName(context, myJobService.class); JobInfo.Builder builder = new JobInfo.Builder(0, serviceComponent); if (recurring) { builder.setPeriodic(15* 10000); //only once every 15 seconds. //builder.setPersisted(true); //will persist across reboots. //except this runs in about 10 to 30 minute intervals... Likely a min threshold here. Log.wtf(TAG, "set recurring"); } else { //just set it for once, between 10 to 30 seconds from now. builder.setMinimumLatency(10 * 1000); // wait at least builder.setOverrideDeadline(30 * 1000); // maximum delay Log.wtf(TAG, "set once"); } //builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED); // require unmetered network //builder.setRequiresDeviceIdle(true); // device should be idle //builder.setRequiresCharging(false); // we don't care if the device is charging or not //builder.setRequiresBatteryNotLow(true); //only when the batter is not low. API 26+ //set some data via a persistablebundle. PersistableBundle extras = new PersistableBundle(); extras.putInt("max", max); builder.setExtras(extras); JobScheduler jobScheduler = (JobScheduler) context.getSystemService(JobScheduler.class); jobScheduler.schedule(builder.build()); }
public static void scheduleJobService(Context context) { boolean isSuccess = false; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { JobInfo.Builder builder = new JobInfo.Builder(JOB_ID, new ComponentName(context, JobSchedulerService.class)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { builder.setMinimumLatency(DaemonUtil.getIntervalTime()); builder.setOverrideDeadline(DaemonUtil.getIntervalTime() * 2); builder.setBackoffCriteria(DaemonUtil.getIntervalTime(), JobInfo.BACKOFF_POLICY_LINEAR);//线性重试方案 } else { builder.setPeriodic(DaemonUtil.getIntervalTime()); } builder.setPersisted(true); JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); if (jobScheduler != null) { jobScheduler.cancelAll(); isSuccess = jobScheduler.schedule(builder.build()) == JobScheduler.RESULT_SUCCESS; } } if (isSuccess) { Log.d(TAG, "Scheduler Success!"); } else { Log.e(TAG, "Scheduler Failed!"); } }
@TargetApi(Build.VERSION_CODES.LOLLIPOP) private void startJobScheduler(Context context) { if (context != null) { LogUtils.d(TAG, "KeepAliveManager--------startJobScheduler"); JobScheduler jobScheduler = (JobScheduler) context.getSystemService(JOB_SCHEDULER_SERVICE); //开启唤醒PushService的定时任务 ComponentName componentName = new ComponentName("jack.com.servicekeep", "jack.com.servicekeep.service.KeepAliveJobSchedulerService"); //ComponentName componentName = new ComponentName(context, KeepAliveJobSchedulerService.class); ComponentName jobService = new ComponentName(context.getPackageName(), KeepAliveJobSchedulerService.class.getName()); JobInfo jobInfo = new JobInfo.Builder(JOB_ID, jobService) .setMinimumLatency(1000) //延时1s后执行 .setPersisted(true) //需要权限RECEIVE_BOOT_COMPLETED .setBackoffCriteria(TimeUnit.MINUTES.toMillis(10), JobInfo.BACKOFF_POLICY_LINEAR) //线性重试方案 .build(); int result = jobScheduler.schedule(jobInfo); if (result == RESULT_SUCCESS) { LogUtils.d(TAG, "startJobScheduler ------ success!!!"); }else{ LogUtils.d(TAG, "startJobScheduler ------ fail!!!"); } } } }
private void resendTheIntentInSeveralSeconds(int seconds) { appendLog(getBaseContext(), TAG, "resendTheIntentInSeveralSeconds:SDK:", Build.VERSION.SDK_INT); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { ComponentName serviceComponent = new ComponentName(this, CurrentWeatherResendJob.class); JobInfo.Builder builder = new JobInfo.Builder(CurrentWeatherResendJob.JOB_ID, serviceComponent); builder.setMinimumLatency(seconds * 1000); // wait at least builder.setOverrideDeadline((3 + seconds) * 1000); // maximum delay JobScheduler jobScheduler = getSystemService(JobScheduler.class); jobScheduler.schedule(builder.build()); appendLog(getBaseContext(), TAG, "resendTheIntentInSeveralSeconds: sent"); } else { AlarmManager alarmManager = (AlarmManager) getBaseContext().getSystemService(Context.ALARM_SERVICE); PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, new Intent(getBaseContext(), CurrentWeatherService.class), PendingIntent.FLAG_CANCEL_CURRENT); alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + (1000 * seconds), pendingIntent); } }
private void scheduleJob(int id, int jobId, String key) { PersistableBundle bundle = new PersistableBundle(); bundle.putInt(NotificationJobService.NOTIFICATION_MODE, id); bundle.putString(NotificationJobService.NOTIFICATION_KEY, key); JobInfo.Builder builder = new JobInfo.Builder(jobId, serviceComponent); if (jobId == 0) { builder.setPeriodic(120 * 1000L); } else { if (id == NotificationJobService.NOTIFICATION_POSTED_CUSTOM_UI && (!Prefs.getBoolean(Constants.PREF_DISABLE_STANDARD_NOTIFICATIONS, false))) builder.setMinimumLatency(CUSTOMUI_LATENCY); else builder.setMinimumLatency(0); builder.setBackoffCriteria(JOB_INTERVAL, JobInfo.BACKOFF_POLICY_LINEAR); builder.setOverrideDeadline(JOB_MAX_INTERVAL); builder.setExtras(bundle); } jobScheduler.schedule(builder.build()); }
private void resendTheIntentInSeveralSeconds(int seconds) { if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M) { ComponentName serviceComponent = new ComponentName(this, WeatherForecastResendJob.class); JobInfo.Builder builder = new JobInfo.Builder(WeatherForecastResendJob.JOB_ID, serviceComponent); builder.setMinimumLatency(seconds * 1000); // wait at least builder.setOverrideDeadline((3 + seconds) * 1000); // maximum delay JobScheduler jobScheduler = getSystemService(JobScheduler.class); jobScheduler.schedule(builder.build()); } else { AlarmManager alarmManager = (AlarmManager) getBaseContext().getSystemService(Context.ALARM_SERVICE); PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, new Intent(getBaseContext(), ForecastWeatherService.class), PendingIntent.FLAG_CANCEL_CURRENT); alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + (1000 * seconds), pendingIntent); } }
@Override public void onCreate() { super.onCreate(); appendLog(this, TAG,"Default locale:", Resources.getSystem().getConfiguration().locale.getLanguage()); PreferenceManager.getDefaultSharedPreferences(this) .edit() .putString(Constants.PREF_OS_LANGUAGE, Resources.getSystem().getConfiguration().locale.getLanguage()) .apply(); LanguageUtil.setLanguage(this, PreferenceUtil.getLanguage(this)); sTheme = PreferenceUtil.getTheme(this); if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M) { JobScheduler jobScheduler = getSystemService(JobScheduler.class); appendLog(this, TAG, "scheduleStart at YourLocalWeather"); AppPreference.setLastSensorServicesCheckTimeInMs(this, 0); jobScheduler.cancelAll(); ComponentName serviceComponent = new ComponentName(this, StartAutoLocationJob.class); JobInfo.Builder builder = new JobInfo.Builder(StartAutoLocationJob.JOB_ID, serviceComponent); builder.setMinimumLatency(1 * 1000); // wait at least builder.setOverrideDeadline(3 * 1000); // maximum delay jobScheduler.schedule(builder.build()); } }
protected JobInfo.Builder createBuilderOneOff(JobInfo.Builder builder, long startMs, long endMs) { return builder.setMinimumLatency(startMs).setOverrideDeadline(endMs); }
private void scheduleJob() { Intent serviceIntent = new Intent(this, NetworkSchedulerService.class); startService(serviceIntent); JobInfo myJob = new JobInfo.Builder(0, new ComponentName(this, NetworkSchedulerService.class)) .setRequiresCharging(false) .setMinimumLatency(3000) .setOverrideDeadline(2000) .setRequiresDeviceIdle(false) .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) .setPersisted(true) .build(); JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE); jobScheduler.schedule(myJob); }
private void scheduleStart(Context context) { appendLog(context, TAG, "scheduleStart at boot, SDK=", Build.VERSION.SDK_INT); if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M) { ComponentName serviceComponent = new ComponentName(context, StartAutoLocationJob.class); JobInfo.Builder builder = new JobInfo.Builder(StartAutoLocationJob.JOB_ID, serviceComponent); builder.setMinimumLatency(1 * 1000); // wait at least builder.setOverrideDeadline(3 * 1000); // maximum delay JobScheduler jobScheduler = context.getSystemService(JobScheduler.class); jobScheduler.schedule(builder.build()); } else { Intent intentToStartUpdate = new Intent("org.thosp.yourlocalweather.action.START_ALARM_SERVICE"); intentToStartUpdate.setPackage("org.thosp.yourlocalweather"); context.startService(intentToStartUpdate); } }
private void addJob(int jobId, int MinimumLatency) { PersistableBundle bundle=new PersistableBundle(); bundle.putString(MyJobService.WORK_DURATION_KEY, "HELLO"); JobInfo.Builder builder=new JobInfo.Builder(jobId, new ComponentName(getPackageName(), MyJobService.class.getName())); // builder.setPeriodic(3000); builder.setMinimumLatency(MinimumLatency); // builder.setOverrideDeadline(OverrideDeadline); builder.setExtras(bundle); builder.setPersisted(true); builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); int result=service.schedule(builder.build()); Log.d("MainActivity", "result:" + result); } }
public JobInfo getJobInfo() { ComponentName serviceComponent = new ComponentName(getApplicationContext(), MyJobWorkService.class); JobInfo.Builder builder = new JobInfo.Builder(0, serviceComponent); builder.setMinimumLatency(10 * 1000); // wait at least builder.setOverrideDeadline(30 * 1000); // maximum delay //builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED); // require unmetered network //builder.setRequiresDeviceIdle(true); // device should be idle //builder.setRequiresCharging(false); // we don't care if the device is charging or not //builder.setRequiresBatteryNotLow(true); //only when the batter is not low. API 26+ return builder.build(); }
protected void reScheduleNextAlarm(int jobId, long updatePeriod, Class serviceClass) { appendLog(getBaseContext(), TAG, "next alarm:", updatePeriod, ", serviceClass=", serviceClass); ComponentName serviceComponent = new ComponentName(this, serviceClass); JobInfo.Builder builder = new JobInfo.Builder(jobId, serviceComponent); builder.setMinimumLatency(updatePeriod); // wait at least builder.setOverrideDeadline(updatePeriod + (3 * 1000)); // maximum delay JobScheduler jobScheduler = getSystemService(JobScheduler.class); jobScheduler.schedule(builder.build()); }
/** Starts the {@link ColorExtractionService} without checking the wallpaper id */ static void startColorExtractionService(Context context) { JobScheduler jobScheduler = (JobScheduler) context.getSystemService( Context.JOB_SCHEDULER_SERVICE); jobScheduler.schedule(new JobInfo.Builder(Utilities.COLOR_EXTRACTION_JOB_ID, new ComponentName(context, ColorExtractionService.class)) .setMinimumLatency(0).build()); }
static void setJobForTodayForecast(Context context, String todayForecastTime) { JobInfo.Builder builder = new JobInfo.Builder( JOB_ID_TODAY_FORECAST, new ComponentName(context.getPackageName(), JobTodayForecastUpdateService.class.getName())) .setMinimumLatency(getForecastAlarmDelay(todayForecastTime)); JobScheduler scheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); if (scheduler != null) { scheduler.schedule(builder.build()); } }
static void setJobForTomorrowForecast(Context context, String TomorrowForecastTime) { JobInfo.Builder builder = new JobInfo.Builder( JOB_ID_TOMORROW_FORECAST, new ComponentName(context.getPackageName(), JobTomorrowForecastUpdateService.class.getName())) .setMinimumLatency(getForecastAlarmDelay(TomorrowForecastTime)); JobScheduler scheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); if (scheduler != null) { scheduler.schedule(builder.build()); } }
protected JobInfo.Builder createBuilderOneOff(JobInfo.Builder builder, long startMs, long endMs) { return builder.setMinimumLatency(startMs).setOverrideDeadline(endMs); }