Android 如何使用 JobDispatcher api 每晚安排任务?

Android How schedule task for every night with JobDispatcher api?

我必须每晚从 Web 服务器下载 json 响应,以前我使用 AlarmManager 来安排任务,但我认为对于这种情况 JobDispatcher 很棒,因为如果网络可用,它会自动执行任务,所以我不必管理这种 stuf.But 我发现了很多 JobDispatcherJobScheduler 的例子,它们都安排了一个简单的工作或计划延迟一段时间,但与我的要求无关, 如果有人对此有所了解,请提供帮助或提供与此相关的任何 link,这将非常有帮助。

更新

1. 如何让它每天晚上都工作,因为目前它只将闹钟设置为午夜一次,如何让它每晚重复一次晚上同一时间 ?

这就是您需要如何安排基于时间的作业

FirebaseJobDispatcher jobDispatcher = new FirebaseJobDispatcher(
                new GooglePlayDriver(this));

Calendar now = Calendar.getInstance();
Calendar midNight = Calendar.getInstance();
midNight.set(Calendar.HOUR, 12);
midNight.set(Calendar.MINUTE, 0);
midNight.set(Calendar.SECOND, 0);
midNight.set(Calendar.MILLISECOND, 0);
midNight.set(Calendar.AM_PM, Calendar.AM);

long diff = now.getTimeInMillis() - midNight.getTimeInMillis();

if (diff < 0) {
    midNight.add(Calendar.DAY_OF_MONTH, 1);
    diff = midNight.getTimeInMillis() - now.getTimeInMillis();
}

int startSeconds = (int) (diff / 1000); // tell the start seconds
int endSencods = startSeconds + 300; // within Five minutes 

Job networkJob = jobDispatcher.newJobBuilder()
        .setService(NetworkJob.class)
        .setTag(NetworkJob.ID_TAG)
        .setRecurring(true)
        .setTrigger(Trigger.executionWindow(startSeconds, endSencods))
        .setLifetime(Lifetime.FOREVER)
        .setReplaceCurrent(true)
        .setConstraints(Constraint.ON_ANY_NETWORK)
        .build();

jobDispatcher.schedule(networkJob);

我建议您将 JobDispatcher 设置为在下一个午夜开始,即将开始时间设置为现在和下一个午夜之间的差值。一旦启动,您可以让它启动一个 24 小时后开始的新作业,即该服务将启动一个新作业,开始时间设置为 24 小时,并使该作业重复出现。