Как выполнить дополнительный код при выполнении операции отмены с помощью createCancelPendingIntent для службы WorkManager Foreground? - PullRequest
0 голосов
/ 19 июня 2020

В настоящее время у нас есть служба Foreground, реализованная с использованием WorkManager. Он отвечает за запуск таймера.

Вот как выглядит наша реализация.

public class TimerWorker extends Worker {

    @NonNull
    private Result doWork() {
        setForegroundAsync(createForegroundInfo());

        do {
            // ...

            Application.instance().getTimerInfoMutableLiveData().postValue(System.currentTimeMillis());

            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                Log.e(TAG, "", e);
                break;
            }

        } while (Application.instance().getFlag());

        return Result.success();
    }
}

Мы используем WorkManager s createCancelPendingIntent, чтобы пользователь мог отменить

PendingIntent intent = WorkManager.getInstance(context)
        .createCancelPendingIntent(getId());


Notification notification = new NotificationCompat.Builder(context, id)
        ...
        .addAction(android.R.drawable.ic_delete, cancel, intent)    // Cancel button
        .build();

Однако, когда пользователь нажимает кнопку отмены в раскрывающемся уведомлении, мы sh получаем возможность выполнить следующий код, чтобы наша служба переднего плана перестала работать, пока l oop.

Application.instance().setFlag(false);

Могу я узнать, как мы можем этого добиться? Спасибо.

...