如何在特定时间排队 WorkManager OneTimeWorkRequest

Par*_*tel 3 java android android-workmanager

我有一个场景,我必须在特定时间使用 WorkManager 向用户发出通知。

我如何在特定时间安排工作,即使用户强制杀死应用程序,它也应该显示出来。或应用程序未运行。

我当前的代码如下:

Data d = new Data.Builder().putInt(IntentConstants.SCHEDULE_ID, scheduleData.getScheduleID()).build();
OneTimeWorkRequest compressionWork =
    new OneTimeWorkRequest.Builder(ScheduleWorker.class)
        .setInputData(d)
        .build();
WorkManager.getInstance().enqueue(compressionWork);
Run Code Online (Sandbox Code Playgroud)

Par*_*tel 5

我想我找到了一个简单有效的解决方案。它工作 100%。

我们必须以毫秒为单位获取当前时间,并需要以毫秒为单位触发它的特定时间,然后您必须计算特定时间 - 当前时间。

我有我的解决方案(下面的工作代码):

Data d = new Data.Builder()
             .putInt(IntentConstants.SCHEDULE_ID, scheduleData.getScheduleID())
             .build();

long currentTime= System.currentTimeMillis();
long specificTimeToTrigger = c.getTimeInMillis();
long delayToPass = specificTimeToTrigger - currentTime;

OneTimeWorkRequest compressionWork =
                        new OneTimeWorkRequest.Builder(ScheduleWorker.class)
                                .setInputData(d)
                                .setInitialDelay(delayToPass, TimeUnit.MILLISECONDS)
                                .build();

WorkManager.getInstance().enqueue(compressionWork);
Run Code Online (Sandbox Code Playgroud)

主要逻辑在delayToPass = currentTime (in Millis) - specificTimeToTrigger (in Millis)