В Android 12.0 (уровень API 31) и более поздних версиях система предоставляет шаблон уведомлений CallStyle , позволяющий отличать уведомления о звонках от других типов уведомлений. Используйте этот шаблон для создания уведомлений о входящих или текущих звонках. Шаблон поддерживает уведомления большого формата, включающие информацию о звонящем и необходимые действия, такие как ответ или отклонение вызова.
Поскольку входящие и текущие вызовы являются событиями с высоким приоритетом, эти уведомления получают наивысший приоритет в панели уведомлений. Такой порядок также позволяет системе перенаправлять эти приоритетные вызовы на другие устройства.
Шаблон уведомления CallStyle включает следующие обязательные действия:
- Ответьте на входящие звонки или отклоните их .
- При наличии продолжающихся звонков, пожалуйста, положите трубку .
- Ответьте на звонок или положите трубку для предварительного отбора.
Действия в этом стиле отображаются в виде кнопок, при этом система автоматически добавляет соответствующие значки и текст. Ручное добавление подписей к кнопкам не поддерживается. Для получения дополнительной информации о принципах проектирования уведомлений см. раздел «Уведомления» .

Необходимые действия передаются в виде интентов, таких как hangupIntent и answerIntent как описано в следующих разделах. Каждый из них представляет собой ссылку на токен, поддерживаемый системой. Токен — это легковесный объект, который может передаваться между различными приложениями и процессами. Система отвечает за управление временем жизни токена и обеспечение возможности использования PendingIntent , даже если приложение, создавшее его, больше не запущено. Когда вы предоставляете другому приложению PendingIntent , вы даете ему разрешение на выполнение указанной операции, например, отклонить или ответить. Это разрешение предоставляется, даже если приложение, создавшее интент, не запущено. Для получения дополнительной информации см. справочную документацию по PendingIntent .
Начиная с Android 14 (уровень API 34), вы можете настроить уведомления о звонках таким образом, чтобы их нельзя было закрыть. Для этого используйте уведомления CallStyle с параметром Notification.FLAG_ONGOING_EVENT через Notification.Builder#setOngoing(true) .
Ниже приведены примеры использования различных методов с уведомлением CallStyle .
// Create a new call, setting the user as the caller.
val incomingCaller = Person.Builder()
.setName("Jane Doe")
.setImportant(true)
.build()
Входящий звонок
Используйте метод forIncomingCall() для создания уведомления о входящем звонке в стиле всплывающего окна.
// Create a call style notification for an incoming call.
val builder = Notification.Builder(context, CHANNEL_ID)
.setContentIntent(contentIntent)
.setSmallIcon(smallIcon)
.setStyle(
Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
.addPerson(incomingCaller)
Текущий звонок
Используйте метод forOngoingCall() для создания уведомления о текущем звонке.
// Create a call style notification for an ongoing call.
val builder = Notification.Builder(context, CHANNEL_ID)
.setContentIntent(contentIntent)
.setSmallIcon(smallIcon)
.setStyle(
Notification.CallStyle.forOngoingCall(caller, hangupIntent))
.addPerson(second_caller)
Отклонить звонок
Используйте метод forScreeningCall() для создания уведомления в стиле вызова, предназначенного для отсеивания входящих звонков.
// Create a call style notification for screening a call.
val builder = Notification.Builder(context, CHANNEL_ID)
.setContentIntent(contentIntent)
.setSmallIcon(smallIcon)
.setStyle(
Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
.addPerson(second_caller)
Обеспечить совместимость с большим количеством версий Android.
В версиях API 30 и более ранних версиях необходимо связать уведомления CallStyle с фоновой службой, чтобы присвоить им высокий ранг, который они получают в API уровня 31 и более поздних версиях. Кроме того, уведомления CallStyle в версиях API 30 и более ранних версиях могут получить аналогичный ранг, если пометить уведомление цветом с помощью метода setColorized() .
Используйте API телекоммуникаций с уведомлениями CallStyle . Для получения дополнительной информации см. Обзор платформы Telecom .