在媒體應用程式中新增通知

如果建構處理音訊或視訊的媒體應用程式,請務必使用正確的通知和通知管道。這可以確保通知具有下列重要功能:

  • 具有通知優先順序
  • 無法關閉
  • 為鈴聲使用音訊屬性

使用 NotificationChannel.Builder 設定兩個通知管道:一個用於來電,另一個用於進行中的通話。

internal companion object {
    const val TELECOM_NOTIFICATION_ID = 200
    const val TELECOM_NOTIFICATION_ACTION = "telecom_action"
    const val TELECOM_NOTIFICATION_INCOMING_CHANNEL_ID = "telecom_incoming_channel"
    const val TELECOM_NOTIFICATION_ONGOING_CHANNEL_ID = "telecom_ongoing_channel"

    private val ringToneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE)
}

如要在任何地方顯示通知,並允許鈴聲播放鈴聲音訊,請將傳入通知管道的重要性設為「高」。

val incomingChannel = NotificationChannelCompat.Builder(
        TELECOM_NOTIFICATION_INCOMING_CHANNEL_ID,
        NotificationManagerCompat.IMPORTANCE_HIGH,
    ).setName("Incoming calls")
        .setDescription("Handles the notifications when receiving a call")
        .setVibrationEnabled(true).setSound(
            ringToneUri,
            AudioAttributes.Builder()
                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                .setLegacyStreamType(AudioManager.STREAM_RING)
                .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE).build(),
        ).build()

只有進行中的通話需要將重要性設為預設設定。請使用以下來電樣式,允許無法關閉來電的通知。

val ongoingChannel = NotificationChannelCompat.Builder(
        TELECOM_NOTIFICATION_ONGOING_CHANNEL_ID,
        NotificationManagerCompat.IMPORTANCE_DEFAULT,
    )
    .setName("Ongoing calls")
    .setDescription("Displays the ongoing call notifications")
    .build()

為了因應使用者裝置在來電期間鎖定的情況,請在全螢幕通知中顯示活動,讓使用者可以接聽來電。

// on the notification
val contentIntent = PendingIntent.getActivity(
    /* context = */ context,
    /* requestCode = */ 0,
    /* intent = */ Intent(context, TelecomCallActivity::class.java),
    /* flags = */ PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,
)

想瞭解如何使用 CallStyle 區分來電通知與其他類型的通知,請參閱「建立通話應用程式的通話樣式通知」一文。