Создание уведомления о стиле звонка для приложений для звонков

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

Поскольку входящие и текущие вызовы являются событиями с высоким приоритетом, эти уведомления получают высший приоритет в тени уведомлений. Этот рейтинг также позволяет системе перенаправлять эти приоритетные вызовы на другие устройства.

Шаблон уведомления CallStyle включает в себя следующие обязательные действия:

  • Ответить или отклонить входящие вызовы.
  • Повесьте трубку при текущих звонках.
  • Ответьте или повесьте трубку для проверки вызова.

Действия в этом стиле отображаются в виде кнопок, при этом система автоматически добавляет соответствующие значки и текст. Ручная маркировка кнопок не поддерживается. Дополнительные сведения о принципах создания уведомлений см. в разделе Уведомления .

Уведомления в стиле звонков с маркированными кнопками
Рисунок 1. Шаблон 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()

Ява

// Create a new call with the user as the caller.
Person incomingCaller = new 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)

Ява

// Create a call style notification for an incoming call.
Notification.Builder 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)

Ява

// Create a call style notification for an ongoing call.
Notification.Builder builder = new 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)

Ява

// Create a call style notification for screening a call.
Notification.Builder builder = new Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller);

Обеспечьте совместимость с другими версиями Android.

Свяжите уведомления CallStyle в API версии 30 или более ранней со службой переднего плана, чтобы присвоить им высокий ранг, присвоенный им на уровне API 31 или более поздней версии. Кроме того, уведомления CallStyle в API версии 30 или более ранней могут достичь аналогичного ранжирования, пометив уведомление как раскрашенное с помощью метода setColorized() .

Используйте API-интерфейсы Telecom с уведомлениями CallStyle . Дополнительные сведения см. в разделе Обзор платформы телекоммуникаций .