Aggiungere notifiche a un'app multimediale

Quando crei un'app multimediale che elabora audio o video, è importante utilizzare le notifiche e i canali di notifica corretti. In questo modo, le notifiche hanno le seguenti utili funzionalità:

  • Hanno la priorità alle notifiche
  • Non possono essere ignorati
  • Utilizzare gli attributi audio per le suonerie

Utilizza NotificationChannel.Builder per configurare due canali di notifica: uno per le chiamate in arrivo e l'altro 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 la suoneria, imposta il livello di 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 le chiamate attive richiedono di impostare l'importanza sul valore predefinito. Utilizza il seguente stile di chiamata in arrivo per consentire che le notifiche relative alle chiamate in arrivo non siano ignorabili.

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, utilizza una notifica a schermo intero per mostrare un'attività che consenta all'utente di rispondere 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,
)

Leggi l'articolo Creare una notifica di stile di chiamata per le app di chiamata per avere istruzioni sull'utilizzo di CallStyle per distinguere le notifiche di chiamata dagli altri tipi di notifiche.