Android在特定时间开始运行JobScheduler

Dus*_*Dus 11 android android-alarms android-jobscheduler

我想在每天的特定时间开始JobScheduler ,并在3小时后完成.

我有20分钟和3小时触发工作的部分,但是在JobInfo.Builder课程中,没有选择在准确的时间启动工作.

JobInfo.Builder类概述中,没有任何内容可以设置启动JobScheduler的时间.

显然,我不想整天运行它,并检查时间是否匹配,这将耗尽更多的电池而不是需要,并且编程很糟糕.

我正在考虑在我指定的时间发出警报并触发这项工作,但这似乎有点矫枉过正.

 JobInfo.Builder builder = new JobInfo.Builder(NIGHT_SYNC_JOB_ID, 
 new ComponentName(context, NightSyncDataJobService.class));

 //Job starts at 11pm, and ends at 2am. Running every 20 minutes.
 builder.setPersisted(true); //Job scheduled to work after reboot
 builder.setPeriodic(Consts.ONE_MINUTE * 20);

 JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
 jobScheduler.schedule(builder.build());
Run Code Online (Sandbox Code Playgroud)

如果您有任何其他问题的解决方案,那么触发此JobScheduler的AlarmManger旁边将非常感激.

pre*_*rak 7

我通过以下方式实现了它(没有AlarmManager),创建了一个新的Job(JOB_ID显然有一个独特的),并告诉JobScheduler它在将来的某个时间使用它setOverrideDeadline().

这是一个可能有用的片段:

private JobInfo getJobInfoForFutureTask(Context context,
                                        long timeTillFutureJob) {
        ComponentName serviceComponent = new ComponentName(context, SchedulerService.class);

        return new JobInfo.Builder(FUTURE_JOB_ID, serviceComponent)
                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_NONE)
                .setOverrideDeadline(timeTillFutureJob)
                .setRequiresDeviceIdle(false)
                .setRequiresCharging(false)
                .setPersisted(true)
                .build();
    }
Run Code Online (Sandbox Code Playgroud)

确保计算要安排任务的正确时间偏移量,并从中删除任何现有的作业ID JobScheduler.