Разработка
Реализация Критических оповещений на Android
Критические оповещения — это уведомления, которые обходят выключатель звука и настройки «Не беспокоить» на устройстве, гарантируя, что пользователь получит важные уведомления независимо от настроек на устройстве.
Критические оповещения — это уведомления, которые обходят выключатель звука и настройки «Не беспокоить» на устройстве, гарантируя, что пользователь получит важные уведомления независимо от настроек на устройстве. В то время как Apple представила эту функцию около 2018 года, Android еще не полностью интегрировал ее. В этой статье мы рассмотрим, как реализовать подобные критические оповещения на Android-устройствах.
Запрос разрешения на отмену DND
Чтобы включить критические оповещения на Android, нам нужно отменить режим «Не беспокоить» (DND) и режимы звонка на устройстве. Для этого необходимо получить от пользователя разрешение на отмену режима DND. В отличие от рантайм разрешений, это разрешение (ACCESS_NOTIFICATION_POLICY) должно быть объявлено в манифесте приложения и доступно через системные настройки.
Чтобы запросить разрешение на отмену DND, мы используем следующий фрагмент кода:
fun openDNDPermissionSettings() { val intent = Intent(Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS) ActivityCompat.startActivity(this, intent, Bundle()) }
Этот код открывает экран «Do not disturb override permission», где пользователи могут предоставить разрешение все таки беспокоить их определенным приложениям.
Переопределение режима DND для уведомлений
Получив разрешение на переопределение DND, мы можем переопределить режим DND специально для критических уведомлений, установив notificationChannel.setBypassDnd(true)
. Это не изменит настройки режима DND устройства, а просто обойдет режим DND только для уведомлений, отправленных по этому каналу.
Переопределение режима тишины/вибрации
Чтобы гарантировать, что звук уведомления будет воспроизводиться для критических сигналов, перед запуском notificationManager.notify
проверьте режим звонка устройства с помощью audioManager.ringerMode
. Если необходимо, установите нормальный режим звонка, отрегулируйте громкость, а затем вернитесь к исходным настройкам после воспроизведения звука уведомления.
val audioManager = getSystemService(ContextWrapper.AUDIO_SERVICE) as AudioManager var originalRingMode = audioManager.ringerMode
Помните, что на некоторых устройствах при включении режима DND режим звонка становится беззвучным, хотя он нормальный. Поэтому проверьте также громкость уведомлений, если она больше 0, то можно предположить, что первоначальный режим звонка не является беззвучным.
Выводы
Реализация критических оповещений на Android предполагает получение разрешения на отмену DND, настройку каналов уведомлений для обхода DND, а также управление настройками устройства для регулировки звука и громкости. Хотя эта функция может иметь ограничения в управляемых профилях, пользователи личных профилей могут предоставить права на отмену режима “Не беспокоить”, чтобы критические оповещения работали как положено.
Полный код и подробности проекта можно найти в репозитории GitHub.
Спасибо за прочтение!
-
Интегрированные среды разработки2 недели назад
Лучшая работа с Android Studio: 5 советов
-
Новости4 недели назад
Видео и подкасты о мобильной разработке 2024.43
-
Новости3 недели назад
Видео и подкасты о мобильной разработке 2024.44
-
Исследования2 недели назад
Поможет ли новая архитектура React Native отобрать лидерство у Flutter в кроссплатформенной разработке?