Уведомление — это сообщение, которое Android отображает за пределами пользовательского интерфейса вашего приложения, чтобы предоставить пользователю напоминания, сообщения от других людей или другую своевременную информацию из вашего приложения. Пользователи могут коснуться уведомления, чтобы открыть ваше приложение или выполнить действие непосредственно из уведомления.
На этой странице представлен обзор того, где появляются уведомления и доступные функции. Чтобы начать создавать уведомления, прочтите «Создание уведомления» .
Дополнительные сведения о дизайне уведомлений и шаблонах взаимодействия см. в руководстве по дизайну уведомлений .
Появления на устройстве
Уведомления автоматически отображаются пользователям в разных местах и форматах. Уведомление отображается в виде значка в строке состояния, более подробной записи в панели уведомлений и значка на значке приложения. Уведомления также появляются на сопряженных носимых устройствах.
Строка состояния и ящик уведомлений
Когда вы отправляете уведомление, оно сначала отображается в виде значка в строке состояния.
Пользователи могут провести вниз по строке состояния, чтобы открыть панель уведомлений, где они смогут просмотреть более подробную информацию и выполнить действия с уведомлением.
Пользователи могут перетащить уведомление в ящике вниз, чтобы открыть расширенное представление, в котором отображается дополнительный контент и кнопки действий, если они предусмотрены. Начиная с Android 13, это расширенное представление включает кнопку, позволяющую пользователям остановить приложение, в котором работают службы приоритетного плана .
Уведомление остается видимым в панели уведомлений до тех пор, пока оно не будет закрыто приложением или пользователем.
Предварительное уведомление
Начиная с Android 5.0, уведомления могут ненадолго появляться в плавающем окне, называемом хедз-ап-уведомлением . Обычно такое поведение предназначено для важных уведомлений, о которых пользователь должен знать немедленно, и оно появляется только в том случае, если устройство разблокировано.
Информационное уведомление появляется, когда ваше приложение отправляет уведомление. Через некоторое время он исчезает, но остается видимым в панели уведомлений, как обычно.
Условия, которые могут вызвать хедз-ап уведомления, включают следующее:
Действия пользователя происходят в полноэкранном режиме, например, когда приложение использует
fullScreenIntent
.Уведомление имеет высокий приоритет и использует мелодии звонка или вибрацию на устройствах под управлением Android 7.1 (уровень API 25) и ниже.
Канал уведомлений имеет большое значение на устройствах под управлением Android 8.0 (уровень API 26) и выше.
Экран блокировки
Начиная с Android 5.0 уведомления могут появляться на экране блокировки.
Вы можете программно указать, будут ли уведомления, публикуемые вашим приложением, отображаться на безопасном экране блокировки, и если да, то какой уровень детализации будет отображаться.
Пользователи могут использовать настройки системы, чтобы выбрать уровень детализации, отображаемый в уведомлениях на экране блокировки, или отключить все уведомления на экране блокировки. Начиная с Android 8.0, пользователи могут отключать или включать уведомления на экране блокировки для каждого канала уведомлений.
Дополнительные сведения см. в разделе Настройка видимости экрана блокировки .
Значок приложения
В поддерживаемых средствах запуска на устройствах под управлением Android 8.0 (уровень API 26) и выше значки приложений обозначают новые уведомления цветным значком , известным как точка уведомления, на соответствующем значке средства запуска приложений.
Пользователи могут коснуться и удерживать значок приложения, чтобы просмотреть уведомления этого приложения. Пользователи могут отклонять уведомления или действовать в соответствии с ними из этого меню, аналогично панели уведомлений.
Чтобы узнать больше о том, как работают значки, прочтите статью «Изменение значка уведомления» .
Устройства Wear OS
Если у пользователя есть сопряженное устройство с Wear OS, все ваши уведомления отображаются там автоматически, включая расширяемые детали и кнопки действий.
Вы можете улучшить качество обслуживания, настроив внешний вид уведомлений на носимых устройствах и предоставив различные действия, включая предлагаемые ответы и ответы на голосовой ввод. Дополнительные сведения см. в статье, как добавить в уведомление функции, предназначенные для носимых устройств .
Структура уведомлений
Дизайн уведомления определяется системными шаблонами, а ваше приложение определяет содержимое каждой части шаблона. Некоторые сведения об уведомлении отображаются только в развернутом виде.
Наиболее распространенные части уведомления показаны на рисунке 7 следующим образом:
- Маленький значок: обязателен; установить с помощью
setSmallIcon()
. - Имя приложения: предоставляется системой.
- Метка времени: предоставляется системой, но вы можете переопределить ее с помощью
setWhen()
или скрыть с помощьюsetShowWhen(false)
. - Большой значок: необязательно; обычно используется только для фотографий контактов. Не используйте его для значка вашего приложения. Установите с помощью
setLargeIcon()
. - Название: необязательно; установить с помощью
setContentTitle()
. - Текст: необязательно; установить с помощью
setContentText()
.
Мы настоятельно рекомендуем использовать системные шаблоны для обеспечения совместимости дизайна на всех устройствах. При необходимости вы можете создать собственный макет уведомлений .
Дополнительные сведения о том, как создать уведомление с помощью этих и других функций, см. в статье Создание уведомления .
Действия по оповещению
Хотя это и не обязательно, рекомендуется для каждого уведомления открывать соответствующее действие приложения при его нажатии. В дополнение к этому действию уведомления по умолчанию вы можете добавить кнопки действий, которые выполняют задачу, связанную с приложением, из уведомления — часто без открытия действия — как показано на рисунке 8.
Начиная с Android 7.0 (уровень API 24), вы можете добавить действие для ответа на сообщения или ввести другой текст непосредственно из уведомления.
Начиная с Android 10 (уровень API 29), платформа может автоматически создавать кнопки действий с предлагаемыми действиями на основе намерений.
Добавление кнопок действий описано далее в разделе «Создание уведомления» .
Требовать разблокированное устройство
Пользователи могут видеть действия уведомлений на экране блокировки устройства. Если действие уведомления заставляет приложение запускать действие или отправлять прямой ответ, пользователи должны разблокировать устройство, прежде чем приложение сможет вызвать это действие уведомления.
В Android 12 (уровень API 31) и более поздних версиях вы можете настроить действие уведомления таким образом, чтобы устройство было разблокировано, чтобы ваше приложение могло вызвать это действие, независимо от того, какой рабочий процесс запускает это действие. Эта опция добавляет дополнительный уровень безопасности к уведомлениям на заблокированных устройствах.
Чтобы потребовать разблокировку устройства до того, как ваше приложение вызовет определенное действие уведомления, передайте true
в setAuthenticationRequired()
при создании действия уведомления, как показано в следующем фрагменте кода:
Котлин
val moreSecureNotification = Notification.Action.Builder(...) // This notification always requests authentication when invoked // from a lock screen. .setAuthenticationRequired(true) .build()
Ява
Notification moreSecureNotification = new Notification.Action.Builder(...) // This notification always requests authentication when invoked // from a lock screen. .setAuthenticationRequired(true) .build();
Расширяемое уведомление
По умолчанию текстовое содержимое уведомления обрезается до одной строки. Если вы хотите, чтобы ваше уведомление было длиннее, вы можете включить большую текстовую область с возможностью расширения, применив дополнительный шаблон, как показано на рисунке 9.
Вы также можете создать расширяемое уведомление с изображением, в стиле папки «Входящие», с беседой в чате или с элементами управления воспроизведением мультимедиа. Дополнительные сведения см. в статье Создание расширяемого уведомления .
Обновления уведомлений и группы
Чтобы не нагружать пользователей множеством или избыточными уведомлениями при наличии дополнительных обновлений, обновите существующее уведомление, а не выпускайте новое, или используйте уведомление в стиле «Входящие» для отображения обновлений беседы.
Однако если необходимо доставить несколько уведомлений, рассмотрите возможность объединения отдельных уведомлений в группу, доступную на Android 7.0 и более поздних версиях.
Группа уведомлений позволяет свернуть несколько уведомлений в одно сообщение в панели уведомлений со сводкой. Пользователь может постепенно расширять группу уведомлений и каждое уведомление в ней для получения более подробной информации, как показано на рисунке 10.
Чтобы узнать, как добавить уведомления в группу, см. Создание группы уведомлений .
Каналы уведомлений
Начиная с Android 8.0 (уровень API 26), все уведомления должны быть назначены каналу, иначе они не появятся. Это позволяет пользователям отключать определенные каналы уведомлений для вашего приложения вместо отключения всех ваших уведомлений. Пользователи могут управлять визуальными и звуковыми параметрами для каждого канала в настройках системы Android, как показано на рисунке 11. Пользователи также могут нажать и удерживать уведомление, чтобы изменить поведение связанного канала.
На устройствах под управлением Android 7.1 (уровень API 25) и ниже пользователи могут управлять уведомлениями только для каждого приложения. Фактически каждое приложение имеет только один канал на Android 7.1 и более ранних версиях.
Приложение может иметь отдельные каналы для каждого типа уведомлений, которые выдает приложение. Приложение также может создавать каналы уведомлений в ответ на выбор, сделанный пользователями. Например, вы можете настроить отдельные каналы уведомлений для каждой группы разговоров, созданной пользователем в приложении для обмена сообщениями.
На этом канале вы также указываете уровень важности ваших уведомлений на Android 8.0 и более поздних версиях, поэтому все уведомления, отправленные на один и тот же канал уведомлений, имеют одинаковое поведение. Это описано в следующем разделе.
Дополнительные сведения см. в разделе Создание каналов уведомлений и управление ими .
Важность уведомления
Android использует важность уведомления, чтобы определить, насколько уведомление отвлекает пользователя визуально и звуково. Чем выше важность уведомления, тем более прерывающим оно является.
В Android 7.1 (уровень API 25) и более ранних версиях важность уведомления определяется его priority
.
В Android 8.0 (уровень API 26) и более поздних версиях важность уведомления определяется importance
канала, на котором опубликовано уведомление. Пользователи могут изменить важность канала уведомлений в настройках системы, как показано на рисунке 12.
Возможные уровни важности и связанное с ними поведение уведомлений следующие:
Срочно: издает звуковой сигнал и отображается в виде хедз-ап уведомления.
Высокий: издает звук.
Средний: не издает звука.
Низкий: не издает звука и не отображается в строке состояния.
Все уведомления, независимо от их важности, отображаются в непрерывных местах системного пользовательского интерфейса, например в панели уведомлений или в виде значка на значке средства запуска. Однако вы можете изменить внешний вид значка уведомления .
Для получения дополнительной информации прочитайте о том , как установить важность .
Режим «Не беспокоить»
Начиная с Android 5.0 (уровень API 21), пользователи могут включить режим «Не беспокоить» , который отключает звук и вибрацию для всех уведомлений. Уведомления по-прежнему отображаются в системном пользовательском интерфейсе как обычно, если пользователь не укажет иное.
В режиме «Не беспокоить» доступны три уровня:
- Полная тишина: блокирует все звуки и вибрации, в том числе от будильника, музыки, видео и игр.
- Только будильники: блокирует все звуки и вибрации, кроме сигналов будильника.
- Только приоритет: пользователи могут настроить, какие общесистемные категории могут их прерывать, например только сигналы тревоги, напоминания, события, вызовы или сообщения. Сообщения и звонки пользователи могут фильтровать по отправителю или звонящему, как показано на рисунке 13.
В Android 8.0 (уровень API 26) и более поздних версиях пользователи могут дополнительно разрешить отправку уведомлений для категорий приложений, также известных как каналы, путем переопределения режима «Не беспокоить» для каждого канала. Например, платежное приложение может иметь каналы для уведомлений о снятии средств и депозитах. Пользователь может разрешить уведомления о снятии средств, уведомления о депозите или и то, и другое в приоритетном режиме.
На устройствах под управлением Android 7.1 (уровень API 25) и ниже пользователи могут разрешить отправку уведомлений для каждого отдельного приложения, а не для каждого канала.
Чтобы настроить уведомления для этих пользовательских настроек, необходимо установить общесистемную категорию .
Уведомления для служб переднего плана
Уведомление требуется, когда ваше приложение запускает службу переднего плана — Service
, работающую в фоновом режиме, которая долговечна и заметна для пользователя, например медиаплеер. Это уведомление нельзя закрыть, как и другие уведомления. Чтобы удалить уведомление, службу необходимо остановить или вывести из состояния переднего плана.
Дополнительные сведения см. в разделе Службы переднего плана . Если вы создаете медиаплеер, прочтите также «Воспроизведение мультимедиа в фоновом режиме» .
Ограничения на публикации
Начиная с Android 8.1 (уровень API 27), приложения не могут подавать уведомления чаще одного раза в секунду. Если ваше приложение отправляет несколько уведомлений за одну секунду, все они отображаются так, как ожидалось, но звучит только первое уведомление в секунду.
Однако Android также применяет ограничение скорости при обновлении уведомления. Если вы слишком часто публикуете обновления для одного уведомления (например, несколько менее чем за одну секунду), система может удалить обновления.
Совместимость уведомлений
Пользовательский интерфейс системы уведомлений Android и API-интерфейсы, связанные с уведомлениями, постоянно развиваются. Чтобы использовать новейшие функции API уведомлений при поддержке старых устройств, используйте API уведомлений библиотеки поддержки NotificationCompat
и его подклассы, а также NotificationManagerCompat
. Это позволяет вам избежать написания условного кода для проверки уровней API, поскольку эти API справляются с этим.
NotificationCompat
обновляется по мере развития платформы и включает в себя новейшие методы. Однако наличие метода в NotificationCompat
не гарантирует, что соответствующая функция будет доступна на старых устройствах. В некоторых случаях вызов недавно представленного API приводит к остановке работы на старых устройствах.
Ниже приводится сводка наиболее заметных изменений поведения уведомлений Android по уровням API.
Android 5.0, уровень API 21
Вводит экран блокировки и всплывающие уведомления.
Позволяет пользователю перевести телефон в режим «Не беспокоить» и настроить, каким уведомлениям разрешено прерывать их, когда устройство находится в приоритетном режиме.
Добавляет методы, позволяющие указать, будет ли отображаться уведомление на экране блокировки, например
setVisibility()
), а также для указания «общедоступной» версии текста уведомления.Добавляет метод
setPriority()
, который сообщает системе, насколько прерывающим является уведомление. Например, если установить высокий приоритет, уведомление будет отображаться как хедз-ап.Добавляет поддержку стеков уведомлений на устройствах Android Wear (теперь называемых Wear OS). Поместите уведомления в стек с помощью
setGroup()
. Стеки уведомлений, позже известные как группы или пакеты, не поддерживаются на планшетах и телефонах до версии Android 7.0 (уровень API 24).
Android 7.0, уровень API 24
Изменяет стиль шаблонов уведомлений, чтобы подчеркнуть изображение героя и аватар.
Добавляет три шаблона уведомлений: один для приложений обмена сообщениями и два других для оформления пользовательских представлений контента с помощью расширяемых возможностей и других системных украшений.
Добавляет поддержку групп уведомлений на портативных устройствах, таких как телефоны и планшеты. Использует тот же API, что и стеки уведомлений Android Wear (теперь называемые Wear OS), представленные в Android 5.0 (уровень API 21).
Позволяет пользователям отвечать внутри уведомления, используя встроенный ответ. Они могут вводить текст, который затем перенаправляется в родительское приложение уведомления.
Android 8.0, уровень API 26
Помещает отдельные уведомления в определенный канал .
Позволяет пользователям отключать уведомления для каждого канала вместо отключения всех уведомлений из приложения.
Приложения с активными уведомлениями отображают значок уведомления поверх значка приложения на главном экране или экране запуска.
Позволяет пользователям отложить уведомление из ящика. Вы можете установить автоматический таймаут для уведомления.
Позволяет установить цвет фона уведомления.
Перемещает некоторые API, касающиеся поведения уведомлений, из
Notification
вNotificationChannel
. Например, используйтеNotificationChannel.setImportance()
вместоNotificationCompat.Builder.setPriority()
для Android 8.0 и более поздних версий.
Android 13.0, уровень API 33
- Добавляет разрешение времени выполнения . Чтобы ваше приложение могло отправлять неисключенные уведомления, пользователь должен предоставить это разрешение вашему приложению.
Android 14.0, уровень API 34
Ограничивает полноэкранные уведомления о намерениях приложениями, которые обеспечивают вызовы и сигналы тревоги. Используйте
NotificationManager.canUseFullScreenIntent
API, чтобы проверить, есть ли у вашего приложения разрешение. Если нет, ваше приложение может использоватьACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT
для запуска страницы настроек, где пользователи могут предоставить разрешение.Изменяет способ получения пользователями уведомлений, которые нельзя отклонить, позволяя пользователям отклонять действие уведомлений, даже если установлен флаг
Notification.FLAG_ONGOING_EVENT
. Это не относится к уведомлениямCallStyle
, если установлен флагNotification.FLAG_ONGOING_EVENT
или к контроллеру политики устройства (DPC) и пакетам поддержки для предприятия. Это также не применяется, когда телефон заблокирован или если пользователь выбирает «Очистить все» .