Aggiungere notifiche a un'app multimediale

Quando si crea un'app multimediale che elabora audio o video, è importante utilizzare le notifiche e i canali di notifica corretti. Questo garantisce che le notifiche includano le seguenti importanti funzionalità:

  • Hanno la priorità delle notifiche.
  • Non possono essere ignorate
  • Utilizza gli attributi audio per le suonerie

Usa NotificationChannel.Builder per configurare due canali di notifica: uno per per le chiamate in arrivo e l'altra per le chiamate attive.

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

Per visualizzare la notifica ovunque e consentire la riproduzione dell'audio per suoneria, imposta l'importanza del canale di notifica in arrivo su 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 per le chiamate attive è necessario impostare l'importanza predefinita. Utilizza la seguire lo stile di chiamata in arrivo per consentire le notifiche per le chiamate in arrivo non ignorabile.

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

Per risolvere i casi d'uso in cui il dispositivo dell'utente è bloccato durante una chiamata in arrivo: utilizzare una notifica a schermo intero per visualizzare un'attività a cui l'utente può rispondi alla chiamata.

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

Per istruzioni su come procedere, consulta l'articolo Creare una notifica per lo stile di chiamata per le app di chiamata utilizzando CallStyle per distinguere gli avvisi di chiamata dagli altri tipi di notifiche.