如何在固定时间为每日作业设置安卓作业的确切时间



我正在尝试安排每天晚上 10 点运行的工作。

我尝试使用 setExact 方法并通过将 22 小时转换为毫秒来提供毫秒,为了进行测试,我执行了该应用程序并将系统时间更改为晚上 10 点,但作业没有执行。

我还尝试给出即将到来的时间,因此将 12:45 转换为毫秒并给出 setExact 方法。但这也没有奏效。

如何设置和测试?

文件跟踪作业

class FileTrackJob extends Job {
        static final String TAG = "FileTracking";
        @NonNull
        @Override
        protected Result onRunJob(Params params) {
            PendingIntent pendingIntent = PendingIntent.getActivity(getContext(), 0,
                    new Intent(getContext(), MainActivity.class), 0);
            Calendar cal = Calendar.getInstance();
            Date currentLocalTime = cal.getTime();
            DateFormat date = new SimpleDateFormat("HH:mm a");
    // you can get seconds by adding  "...:ss" to it
            String localTime = date.format(currentLocalTime);
            Notification notification = new NotificationCompat.Builder(getContext())
                    .setContentTitle("Android Job Demo")
                    .setContentText("Notification from Android Job Demo App. " + localTime)
                    .setAutoCancel(true)
                    .setContentIntent(pendingIntent)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setShowWhen(true)
                    .setColor(Color.RED)
                    .setLocalOnly(true)
                    .build();
            NotificationManagerCompat.from(getContext())
                    .notify(new Random().nextInt(), notification);

            return Result.SUCCESS;
        }
        static void scheduleNoti() {
            new JobRequest.Builder(TrackingJob.TAG)
                    //  .setPeriodic(TimeUnit.MINUTES.toMillis(15), TimeUnit.MINUTES.toMillis(15))
                    .setExact(44820000)
                    .setUpdateCurrent(true)
                    .setPersisted(true)
                    .build()
                    .schedule();
        }
    }

主活动

FileTrackJob.scheduleNoti();

主应用

public class MainApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        JobManager.create(this).addJobCreator(new DemoJobCreator());
    }
}

演示工作创建者

class DemoJobCreator implements JobCreator {
    @Override
    public Job create(String tag) {
        switch (tag) {
            case TrackingJob.TAG:
                return new TrackingJob();
            case FileTrackJob.TAG:
                return new FileTrackJob();
            default:
                return null;
        }
    }
}

此外,我还安排了一个定期工作,此作业不适用于红色mi等某些设备,在一台三星设备上它没有重复,但在moto g4上运行良好。

class TrackingJob extends Job {
    static final String TAG = "tracking";
    @NonNull
    @Override
    protected Result onRunJob(Params params) {
        Intent pi = new Intent(getContext(), GetLocationService.class);
        getContext().startService(pi);

        return Result.SUCCESS;
    }
    static void schedulePeriodic() {
        new JobRequest.Builder(TrackingJob.TAG)
                .setPeriodic(TimeUnit.MINUTES.toMillis(15), TimeUnit.MINUTES.toMillis(15))
                .setUpdateCurrent(true)
                .setPersisted(true)
                .build()
                .schedule();
    }
}

任何人都可以帮忙吗?谢谢。。

您必须

每天使用DailyJob而不是Job在特定时间执行某些操作。

public static final class MyDailyJob extends DailyJob {
    public static final String TAG = "MyDailyJob";
    public static void schedule() {
        // schedule between 1 and 6 *PM*
        DailyJob.schedule(new JobRequest.Builder(TAG), TimeUnit.HOURS.toMillis(13), TimeUnit.HOURS.toMillis(18));
    }
    @NonNull
    @Override
    protected DailyJobResult onRunDailyJob(Params params) {
        return DailyJobResult.SUCCESS;
    }
}

另外:如果要设置特定的分钟和秒,请使用(假设在 15:48:05 和 17:42:09 之间(:

    DailyJob.schedule(new JobRequest.Builder(TAG), TimeUnit.HOURS.toMillis(15)+TimeUnit.MINUTES.toMillis(48)+TimeUnit.SECONDS.toMillis(5), 
TimeUnit.HOURS.toMillis(17)+TimeUnit.MINUTES.toMillis(42)+TimeUnit.SECONDS.toMillis(9));

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新