3

特定の時間に 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);
4

3 に答える 3

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

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

WorkManager.getInstance().enqueue(compressionWork);

選択された時間 > 現在の時間の場合、選択された時間に正しくトリガーされます。選択された時間 < 現在の時間の場合、すぐにトリガーされます。

即時トリガーを克服するには、以下の条件を使用して、選択した時間が現在の時間よりも短い場合に翌日トリガーすることができます。

if ((specificTimeToTrigger - currentTime) < 0) {
    delayToPass = (86400000)-(currentTime - specificTimeToTrigger);
    //24hr-(currentTime - specificTimeToTrigger)
} else {
    delayToPass = specificTimeToTrigger - currentTime;
}
于 2021-07-05T13:26:05.943 に答える