В настоящее время у нас есть служба 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);
Могу я узнать, как мы можем этого добиться? Спасибо.