Как далеко (и почему!) Срабатывает сигнализация Android в прошлом? - PullRequest
0 голосов
/ 12 октября 2018

У меня было несколько проблем с настройкой будильника в Android.Я попытался установить повторяющиеся / неповторяющиеся сигналы тревоги и точные / неточные сигналы тревоги, но это не имеет значения, если сигнал тревоги когда-либо был установлен на какое-то время в прошлом, он срабатывает, как только он установлен.Я проверил это еще в течение 5 часов, и установил будильник в прошлом, и он по-прежнему срабатывает немедленно.

Например:

Время 7 утра, и я установил будильник для выполненияв 2 часа ночи.Это, очевидно, означает, что в следующий раз часы будут показывать 2 часа ночи, но это не имеет значения, будильник сработает в 7 часов утра, сразу после его установки.

Приведенный ниже код должен выбрать случайное время между1:00 утра и 3:59 утра, чтобы установить / включить будильник на следующий календарный день, а затем логика возвращается назад, чтобы снова установить себя после выполнения.Тревога будет срабатывать многократно, навсегда.

    int randomHour = new Random().nextInt((3 - 1) + 1) + 1;
    int randomMinute = new Random().nextInt((59 - 1) + 1) + 1;

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, randomHour);
    calendar.set(Calendar.MINUTE, randomMinute);
    calendar.set(Calendar.SECOND, 0);
    calendar.add(Calendar.DAY_OF_MONTH, 1);

    alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

Вопросы:

  1. В какой момент Android прекращает выполнение аварийных сигналов в прошлом?

  2. Есть ли способ остановить это?

1 Ответ

0 голосов
/ 26 октября 2018

" Это очевидно предназначено для следующего раза" Не работает для компьютеров, они будут делать именно то, что вы им скажете.

calendar.getTimeInMillis() возвращает количество миллисекунд с 1 января 1970 года в 00:00:00 по Гринвичу.Вам нужно указать не только время, но и дату, когда вы хотите, чтобы сработал будильник.Вместо этого вы всегда звоните calendar.add(Calendar.DAY_OF_MONTH, 1); (первый день текущего месяца)

...