Как запустить сервис работы в данный момент
Я хочу создать что-то вроде приложения для напоминания, которое уведомляет пользователя в указанное время, я хочу использовать API планировщика заданий для достижения этого, скажем, я хочу запустить службу в 9:00 и 12:00, что нужно добавить в следующем коде для достижения этот.
public void startJobService(){
GooglePlayDriver driver = new GooglePlayDriver(this);
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(driver);
Bundle myExtrasBundle = new Bundle();
myExtrasBundle.putString("some_key", "some_value");
Job myJob = dispatcher.newJobBuilder()
.setService(jobservice.class)
.setTag("unique-tag")
.setExtras(myExtrasBundle)
.build();
dispatcher.mustSchedule(myJob);
}
//this is the JobService class
public class jobservice extends JobService{
private static final String TAG = "jobservice";
@Override
public boolean onStartJob(JobParameters job) {
Log.d(TAG, "onStartJob: "+job.getExtras());
return true;
}
@Override
public boolean onStopJob(JobParameters job) {
return false;
}
}
1 ответ
К сожалению, похоже, что JobService не предоставляет этот API. Вы можете сделать две вещи:
- Используйте Alarm Manager для запуска службы заданий, когда вы хотите или
- Регулярно выполняйте свою работу (скажем, раз в час). Затем проверьте, находится ли текущее время на желаемом интервале. Если да, продолжайте, если нет, прервите работу.
Например:
final Job job = dispatcher.newJobBuilder()
.setService(MyService.class)
.setTag(MyService.class.getName())
.setRecurring(true)
.setLifetime(Lifetime.FOREVER)
.setTrigger(Trigger.executionWindow(HOUR, 2 * HOUR))
.setReplaceCurrent(false)
.setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
.build();
А затем в вашей службе работы:
@Override
public boolean onStartJob(JobParameters job) {
if (!nowIsInDesiredInterval()) {
Timber.i("Now is not inside the desired interval. Aborting.");
return false;
}
// else execute your job
// .....
return false;
}