В моем приложении у меня установлен будильник, который при запуске запускает службу, которая будет выполнять задачу (в моем приложении она отправляет текстовое сообщение без взаимодействия с пользователем). Это сообщение может быть установлено на 2 часа в будущем или на год в будущем. Вот как я это реализую.
В моей основной деятельности
пользователь набирает сообщение, выбирает дату и время (в миллисекундах), и это время будильника (в миллисекундах) постоянно сохраняется. Затем я вызываю службу, которую я установил как липкую, и загружаюсь при запуске.
На моей службе.
Когда вызывается служба (которая после первого планирования сообщения теперь работает постоянно), она создает сигнал тревоги с сохраненным временем сигнала. Это хорошо, потому что, если телефон перезагрузится, будильник снова сработает.
Вот в чем проблема
После того, как время будильника прошло и сообщение успешно отправлено, я не вижу способа отключить эту службу от постоянной работы. Поэтому, как только служба будет убита и перезапущена (например, при перезагрузке телефона), она запустится, увидит, что время будильника уже в прошлом, и немедленно запустит службу, которая отправляет сообщение. Поэтому, пока я не очистил данные в приложении, я получаю случайные повторяющиеся сообщения, отправленные в случайное время в будущем.
Мое решение (не элегантное).
После того, как сообщение отправляется в первый раз, я добавляю 50 лет (в миллисекундах) к времени будильника и сохраняю его постоянно. Таким образом, он не будет запускаться снова, пока пользователь не установит время самостоятельно. Кажется, это сработало, но ИМО — ужасное решение.
Должен быть более правильный способ настроить постоянное оповещение так, чтобы оно запускалось только один раз. Может ли кто-нибудь, у кого больше опыта работы с AlarmManager, посоветовать мне?