Сигнал тревоги срабатывает даже за прошедшее время - PullRequest
0 голосов
/ 08 апреля 2020

Я устанавливаю один повторяющийся сигнал, который срабатывает каждый день в 9 часов вечера. Поэтому я устанавливаю будильник сразу после входа в систему. Вот мой код.

AlarmManager alarmManager = (AlarmManager) applicationContext.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(applicationContext, LogoutReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(applicationContext, 100, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        Calendar calendar = Calendar.getInstance();
        int hourOfTheDay = new LocaleTranslation().getIntValue(KeysConstant.AUTO_LOGOUT_TIMER_VALUE, Constants.AUTO_LOGOUT_HOUR_OF_DAY_VALUE);
        int minutes = new LocaleTranslation().getIntValue(KeysConstant.AUTO_LOGOUT_TIMER_MINUTE_VALUE, Constants.AUTO_LOGOUT_MINUTE_VALUE);
        int seconds = new LocaleTranslation().getIntValue(KeysConstant.AUTO_LOGOUT_TIMER_SECOND_VALUE, Constants.AUTO_LOGOUT_SECOND_VALUE);
        calendar.set(Calendar.HOUR_OF_DAY, hourOfTheDay );
        calendar.set(Calendar.MINUTE, minutes );
        calendar.set(Calendar.SECOND, seconds );
        Objects.requireNonNull(alarmManager).setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
        LMPSharedPrefs.getInstance().write(SharedPrefsConstants.PREFS_LOGOUT_SCHEDULER, TIMER_STARTED);

Работает нормально, и приложение выходит из системы ровно в 9,01 вечера. Но если я войду снова, то снова получаю выход. Означает, что мой сигнал тревоги срабатывает и в прошлый раз.

Есть ли лучший способ избежать срабатывания будильника за прошедшее время?

1 Ответ

0 голосов
/ 08 апреля 2020

Вместо этого:

 calendar.set(Calendar.HOUR_OF_DAY, 21);
        calendar.set(Calendar.MINUTE, 1);
        calendar.set(Calendar.SECOND, 1);

Добавьте это:

 calendar.set(Calendar.HOUR_OF_DAY, hourOfTheDay);
        calendar.set(Calendar.MINUTE, minutes);
        calendar.set(Calendar.SECOND, seconds);

Вы инициализировали и объявили свои значения времени, но вы не используйте их в своем коде.

Обновление:

   //region Enable Daily Notifications
        calendar = Calendar.getInstance();         
      calendar.setTimeInMillis(System.currentTimeMillis());
     calendar.set(Calendar.HOUR_OF_DAY, 10); //24 Hour.   
   Format - 10am alarm set.
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    // if notification time is before selected time, send. 
 notification the next day
    if (calendar.before(Calendar.getInstance())) {
        calendar.add(Calendar.DATE, 1);
    }
    if (manager != null) {
     //your alarmanager repeating code here
    }

Calendar.before - это основной лог c для сравнения времени. Если до не работает, то попробуйте с после.

...