Thêm thông báo vào ứng dụng đa phương tiện

Khi xây dựng một ứng dụng đa phương tiện xử lý âm thanh hoặc video, điều quan trọng là bạn phải sử dụng đúng kênh thông báo và thông báo. Điều này đảm bảo rằng thông báo có các tính năng giá trị sau đây:

  • Có mức độ ưu tiên của thông báo
  • Không đóng được
  • Sử dụng các thuộc tính âm thanh làm nhạc chuông

Sử dụng NotificationChannel.Builder để thiết lập 2 kênh thông báo: một kênh cho cuộc gọi đến và kênh còn lại cho các cuộc gọi đang diễn ra.

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

Để hiển thị thông báo ở mọi nơi và cho phép thông báo phát âm thanh cho nhạc chuông, hãy đặt mức độ quan trọng của kênh thông báo đến ở mức cao.

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

Chỉ những lệnh gọi đang diễn ra mới yêu cầu đặt mức độ quan trọng thành mặc định. Hãy sử dụng kiểu cuộc gọi đến sau để cho phép loại thông báo có cuộc gọi đến không đóng được.

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

Để giải quyết các trường hợp sử dụng mà thiết bị của người dùng bị khoá trong cuộc gọi đến, hãy dùng thông báo toàn màn hình để hiển thị hoạt động nhằm cho phép người dùng trả lời cuộc gọi.

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

Hãy đọc bài viết Tạo thông báo kiểu cuộc gọi cho ứng dụng cuộc gọi để biết hướng dẫn về cách sử dụng CallStyle để phân biệt thông báo cuộc gọi với các loại thông báo khác.