Освой Android играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
2-й курс/Закрытая зона
Обновлено: 18 мая 2023, 9 мая 2024
Одноразовая сигнализация
Установка повторяющейся сигнализации
Точная сигнализация (Android 12, API 31)
Шлём уведомления
AlarmManager API используется для отправки пользователю разовых или повторяющихся сообщений в заданное время средствами системы. Таким образом вы сможете создавать различные планировщики, будильники, реализовать выполнение регулярных сетевых запросов, запуска трудоёмких или дорогих операций, запланированных на определённое время и другие приложения, которые должны срабатывать по расписанию.
Важно помнить, что механизм сигнализации не зависит от конкретного приложения. Вы делегируете свои желания системе и она сама сделает за вас работу. Ваши прописанные намерения сработают в определённое время или с заданным интервалом. Так как сигнализация устанавливается за пределами вашего приложения, она может быть использована для вызова событий, принадлежащих приложению, или для запуска самого приложения, даже если оно закрыто. Сигнализация может стать мощным инструментом в сочетании с приёмниками широковещательных намерений.
Таким образом, сигнализация чрезвычайно полезна, когда речь идёт о снижении требований к ресурсам, особенно в случае с приложениями, которые работают в фоновом режиме, позволяя останавливать сервисы и отключать таймеры, сохраняя возможность выполнять запланированные действия.
Сигнализация в Android остаётся активной даже тогда, когда устройство находится в режиме ожидания и при необходимости может его «пробудить», однако она отменяется каждый раз, когда устройство перезагружается.
Доступ к службе Alarm Service осуществляется при помощи объекта AlarmManager следующим образом:
val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
Сигнализацию можно разделить на два типа: повторяющиеся и одноразовые. При этом оба типа сигнализаций могут использовать точное и приблизительное время срабатывания. Здесь надо понимать разницу между ними и использовать правильный вариант. Допустим, вы хотите ежедневно узнавать цену на корм котику. В этом случае точное время не обязательно использовать, разница в одну-две минуты не критичны. А вот кормить кота в одно время может быть важным - иначе кот обидится. Тем более, что вдобавок вчера вы забыли его погладить.
При этом точное время сигнализации использует больше ресурсов батареи и требует наличия специального разрешения в манифесте.
Методы set(), setRepeating(), setInexactRepeating() используют следующие параметры:
Для установки сигнализации вам придётся создать собственную службу, наследуясь от базового класса Service (либо через приёмник BroadcastReceiver):
public class AlarmService extends Service {...}
Запуск и управление службой происходит при помощи объекта Intent.
Для задания времени работы оповещения необходимо установить его время запуска и добавить к нему длительность работы этого оповещения. Например, нам необходимо, чтобы оповещение отрабатывало 5 секунд после запуска:
long time = SystemClock.elapsedRealTime() + 5000;
Также можно использовать объект Calendar.
Вы вошли на сайт, как гость.
Необходимо зарегистрироваться, чтобы прочитать статью