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.