Как работать со счетчиком, который завершает определенный день и перезапускает счетчик в другой день (обратный отсчет)?

#java #android #android-studio #countdown

#java #Android #android-studio #обратный отсчет

Вопрос:

как дела
Мне нравится проводить мероприятие каждое воскресенье в 10:00:00 утра
Это работает один раз.

Пример: Таймер обратного отсчета заканчивается в субботу, а в воскресенье в 10:00:00, i автоматически перезапускается в десять часов (интервал равен одному дню В этот интервал, когда я хотел бы открыть подарок после дня его закрытия)

     Calendar cal = Calendar.getInstance();
    cal.set(Calendar.HOUR_OF_DAY, 8);
    cal.set(Calendar.MINUTE, 19);
    cal.set(Calendar.SECOND, 20);
    if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {


        if (cal.get(Calendar.HOUR_OF_DAY) == 8) {


            Toast.makeText(getApplicationContext(), "synday is 8 oclock", Toast.LENGTH_SHORT).show();


            if (cal.get(Calendar.MINUTE) == 19) {

                Toast.makeText(getApplicationContext(), "synday is min", Toast.LENGTH_SHORT).show();


               resetTimer();


            } else {
                Toast.makeText(getApplicationContext(), "synday not  min", Toast.LENGTH_SHORT).show();

            }


        } else {

            Toast.makeText(getApplicationContext(), "synday no 8", Toast.LENGTH_SHORT).show();

        }
    } else {

        Toast.makeText(getApplicationContext(), "no sunday", Toast.LENGTH_SHORT).show();


    }


}
  

Ответ №1:

Если вы хотите запланировать сброс таймера на каждую субботу, вы можете использовать WorkManager для Android. Он поддерживает все уровни API, так что у вас не должно возникнуть никаких проблем. Вот документы: https://developer.android.com/topic/libraries/architecture/workmanager

все сводится к следующему:

импортируйте эти зависимости

 implementation "androidx.work:work-runtime:2.4.0"
  

Определите, что вы хотите сделать:

 public class TimerResetWorker extends Worker {
   public TimerResetWorker(@NonNull Context context,@NonNull WorkerParameters params) {
       super(context, params);
   }

   @Override
   public Result doWork() {

     resetTimer(); //do what you want to do

     return Result.success(); //you have Result.failure() / retry() in case something goes wrong
   }
}
  

Затем просто планируйте задание каждые 7 дней (начиная с субботы):

  PeriodicWorkRequest mWork = new PeriodicWorkRequest.Builder(TimerResetWorker.class, 7, TimeUnit.DAYS).build();
 WorkManager.getInstance().enqueue(mWork);
  

Комментарии:

1. Как использовать obj PeriodicWorkRequest???? И куда мне это поместить?

2. Это написано во второй строке… Вы используете WorkManager.getInstance().enqueue(mWork); чтобы запланировать это, и вы можете поместить запрос куда угодно, я бы предложил MainActivity или, если у вас есть фрагменты, любой соответствующий.

3. Как мне поместить это в функцию?

4. private void resetTimer() { mTimeLeftInMillis = START_TIME_IN_MILLIS; updateCountDownText(); startTimer(); } как связать эту функцию

5. Внутри DoWork() :/