Khi xây dựng một ứng dụng đa phương tiện có khả năng xử lý âm thanh hoặc video, bạn cần sử dụng các thông báo và kênh thông báo chính xác. Chiến dịch này đảm bảo rằng thông báo có những tính năng có giá trị sau:
- Có ưu tiên thông báo
- Không đóng được
- Sử dụng các thuộc tính âm thanh cho nhạc chuông
Sử dụng NotificationChannel.Builder
để thiết lập hai kênh thông báo: một cho
cuộc gọi đến và cuộc gọi 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, đặt mức độ quan trọng của kênh thông báo đến thành 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ỉ cuộc gọi đang hoạt động mới cần đặt tầm quan trọng thành mặc định. Sử dụng theo kiểu cuộc gọi đến để cho phép hiển thị thông báo cho 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á khi đang có cuộc gọi đến, sử dụng thông báo toàn màn hình để hiển thị hoạt động 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 gọi để xem hướng dẫn về
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.