在构建处理音频或视频的媒体应用时,务必使用正确的通知和通知渠道。这可确保通知具有以下宝贵功能
- 具有通知优先级
- 不可解除
- 使用音频属性作为铃声
使用 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
区分呼叫通知与其他类型通知的说明。