Cuando compilas una app de música que procesa audio o video, es importante las notificaciones y los canales de notificación correctos. Esta garantiza que las notificaciones tengan las siguientes funciones valiosas:
- Tienen prioridad de notificaciones
- No se pueden descartar.
- Usa atributos de audio para los tonos
Usa NotificationChannel.Builder
para configurar dos canales de notificaciones: uno para
para las llamadas entrantes
y las activas.
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)
}
Para mostrar la notificación en todas partes y permitir que reproduzca audio para la tono, establece la importancia del canal de notificaciones entrante en alta.
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()
Solo las llamadas activas requieren que se establezca la importancia como predeterminada. Usa el siguiendo el estilo de llamada entrante para permitir que se puedan recibir notificaciones de llamadas entrantes no se pueden descartar.
val ongoingChannel = NotificationChannelCompat.Builder(
TELECOM_NOTIFICATION_ONGOING_CHANNEL_ID,
NotificationManagerCompat.IMPORTANCE_DEFAULT,
)
.setName("Ongoing calls")
.setDescription("Displays the ongoing call notifications")
.build()
Para abordar casos de uso en los que el dispositivo del usuario se bloquea durante una llamada entrante, usar una notificación de pantalla completa para mostrar una actividad que le permita al usuario responder la llamada.
// 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,
)
Lee Cómo crear una notificación con estilo de llamada para apps de llamadas para obtener instrucciones sobre lo siguiente:
usando CallStyle
para distinguir las notificaciones de llamadas de otros tipos de
notificaciones.