建立通話應用程式的通話樣式通知

在 Android 12.0 (API 級別 31) 以上版本中,系統會提供 CallStyle 通知範本,用於區分來電通知和 其他類型的通知。請使用這個範本建立 進行中通話的通知。範本支援大格式通知 包含來電者資訊和必要操作,例如接聽或 拒絕通話

來電和進行中的通話都是高優先順序事件,因此這些通知 會在通知欄中優先顯示使用者需求這個排名也讓 系統,將這些優先來電轉接至其他裝置。

CallStyle 通知範本包含下列必要動作:

  • 接聽來電時選擇「接聽」或「拒接」
  • 掛斷目前的通話。
  • 接聽掛斷來電過濾。

這個樣式中的動作會顯示為按鈕,並自動在 適當圖示和文字不支援手動為按鈕加上標籤。 如要進一步瞭解通知設計原則,請參閱 通知:

通話樣式通知 (有標籤的按鈕)
圖 1. 用於來電和進行中通話的 CallStyle 範本。

必要動作會以意圖的形式傳遞,例如 hangupIntentanswerIntent。每個都代表 憑證權杖權杖是一種輕量物件 且可在不同的應用程式和程序之間傳遞系統是 負責管理權杖的生命週期 即使建立 PendingIntent 的應用程式已無法使用,還是可以使用 備用資源將 PendingIntent 提供給其他應用程式,即代表您 但具備執行指定作業的權限,例如拒絕或回答。 即使建立意圖的應用程式也一樣 目前並未執行。詳情請參閱參考說明文件 之 PendingIntent

從 Android 14 (API 級別 34) 開始,您可以設定來電通知 這是不可關閉的方法是透過以下方式使用 CallStyle 通知: Notification.FLAG_ONGOING_EVENTNotification.Builder#setOngoing(true)

以下範例說明如何搭配 CallStyle 使用各種方法 通知。

Kotlin

// Create a new call, setting the user as the caller.
val incomingCaller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

Java

// Create a new call with the user as the caller.
Person incomingCaller = new Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build();

來電

請使用 forIncomingCall() 方法為 。

Kotlin

// 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)

Java

// 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() 方法為 進行中的通話。

Kotlin

// 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)

Java

// 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() 方法為以下項目建立呼叫樣式通知: 過濾來電

Kotlin

// 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)

Java

// 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 版本提供相容性

將 API 30 以下版本的 CallStyle 通知與 前景服務,以便為他們指派 API 中最高排名 第 31 級以上。此外,API 版本 30 的 CallStyle 通知 或以上版本可同時將通知標示為 透過 setColorized() 方法進行色彩。

搭配 CallStyle 通知使用 Telecom API。若需更多資訊,請參閲 電信架構總覽