Как запустить сервис работы в данный момент

Я хочу создать что-то вроде приложения для напоминания, которое уведомляет пользователя в указанное время, я хочу использовать 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;
}
Другие вопросы по тегам