Menambahkan notifikasi ke aplikasi media

Saat membuat aplikasi media yang memproses audio atau video, penting untuk menggunakan notifikasi dan saluran notifikasi yang benar. Ini memastikan bahwa notifikasi memiliki fitur berharga berikut:

  • Memiliki prioritas notifikasi
  • Tidak dapat ditutup
  • Menggunakan atribut audio untuk nada dering

Gunakan NotificationChannel.Builder untuk menyiapkan dua saluran notifikasi: satu untuk untuk panggilan masuk dan satu lagi untuk panggilan aktif.

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

Untuk menampilkan notifikasi di mana saja dan mengizinkannya memutar audio untuk nada dering, atur tingkat kepentingan saluran notifikasi yang masuk ke tinggi.

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

Hanya panggilan aktif yang tingkat kepentingannya disetel ke default. Gunakan mengikuti gaya panggilan masuk untuk memungkinkan notifikasi tidak dapat ditutup.

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

Untuk mengatasi kasus penggunaan ketika perangkat pengguna terkunci selama panggilan masuk, gunakan notifikasi layar penuh untuk menampilkan aktivitas agar pengguna dapat menjawab panggilan tersebut.

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

Baca Membuat notifikasi gaya panggilan untuk aplikasi panggilan guna mengetahui petunjuk tentang menggunakan CallStyle untuk membedakan notifikasi panggilan dari jenis notifikasi.