В 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()
Ява
// 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
. Дополнительные сведения см. в разделе Обзор платформы телекоммуникаций .