Membuat notifikasi gaya panggilan untuk aplikasi panggilan

Di Android 12.0 (level API 31) dan yang lebih baru, sistem menyediakan template notifikasi CallStyle untuk membedakan notifikasi panggilan dari jenis notifikasi lainnya. Gunakan template ini untuk membuat notifikasi panggilan masuk atau yang sedang berlangsung. Template ini mendukung notifikasi format besar yang menyertakan informasi pemanggil dan tindakan yang diperlukan seperti menjawab atau menolak panggilan.

Karena panggilan masuk dan sedang berlangsung merupakan acara berprioritas tinggi, notifikasi ini mendapatkan prioritas utama di menu notifikasi. Urutan ini juga memungkinkan sistem untuk meneruskan panggilan yang diprioritaskan ini ke perangkat lain.

Template notifikasi CallStyle mencakup tindakan wajib berikut:

  • Jawab atau Tolak untuk panggilan masuk.
  • Tutup telepon untuk panggilan yang sedang berlangsung.
  • Jawab atau Tutup telepon untuk penyaringan panggilan.

Tindakan dalam gaya ini muncul sebagai tombol, dengan sistem yang otomatis menambahkan ikon dan teks yang sesuai. Pelabelan tombol secara manual tidak didukung. Untuk mengetahui informasi selengkapnya tentang prinsip desain notifikasi, lihat Notifikasi.

Notifikasi gaya panggilan dengan tombol berlabel
Gambar 1. Template CallStyle untuk panggilan masuk dan yang sedang berlangsung.

Tindakan yang diperlukan diteruskan sebagai intent, seperti hangupIntent dan answerIntent di bagian berikut. Setiap token ini adalah referensi ke token yang dikelola oleh sistem. Token adalah objek ringan yang dapat diteruskan di antara berbagai aplikasi dan proses. Sistem bertanggung jawab untuk mengelola masa aktif token dan memastikan PendingIntent dapat digunakan meskipun aplikasi yang membuatnya tidak lagi berjalan. Saat Anda memberikan PendingIntent ke aplikasi lain, Anda memberikan izin kepada aplikasi tersebut untuk melakukan operasi yang ditentukan, seperti menolak atau menjawab. Izin ini diberikan meskipun aplikasi yang membuat intent tidak berjalan. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi untuk PendingIntent.

Mulai Android 14 (level API 34), Anda dapat mengonfigurasi notifikasi panggilan agar tidak dapat ditutup. Untuk melakukannya, gunakan notifikasi CallStyle dengan Notification.FLAG_ONGOING_EVENT melalui Notification.Builder#setOngoing(true).

Berikut adalah contoh penggunaan berbagai metode dengan notifikasi CallStyle.

// Create a new call, setting incoming caller.
val incomingCaller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

Panggilan masuk

Gunakan metode forIncomingCall() untuk membuat notifikasi gaya panggilan untuk panggilan masuk.

// For demonstrative purposes only, should use a well-defined Intents.
val contentIntent =
    PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE)
val declineIntent =
    PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE)
val hangupIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE)
val answerIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE)
// Create a call style notification for an incoming call.
val builderForIncomingCall = NotificationCompat.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(R.drawable.ic_logo)
    .setStyle(
        NotificationCompat.CallStyle.forIncomingCall(incomingCaller, declineIntent, answerIntent))
    .addPerson(incomingCaller)

Panggilan sedang berlangsung

Gunakan metode forOngoingCall() untuk membuat notifikasi gaya panggilan untuk panggilan yang sedang berlangsung.

// Create a call style notification for an ongoing call.
val builderForOngoingCall = NotificationCompat.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(R.drawable.ic_logo)
    .setStyle(
        NotificationCompat.CallStyle.forOngoingCall(callerAtOtherEnd, hangupIntent))
    .addPerson(caller)

Menyaring panggilan

Gunakan metode forScreeningCall() untuk membuat notifikasi gaya panggilan guna menyaring panggilan.

// Create a call style notification for screening a call.
val builder = NotificationCompat.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(R.drawable.ic_logo)
    .setStyle(
        NotificationCompat.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(caller)

Menyediakan kompatibilitas di lebih banyak versi Android

Kaitkan notifikasi CallStyle di versi API 30 atau yang lebih lama dengan layanan latar depan untuk menetapkan peringkat tinggi yang diberikan di level API 31 atau yang lebih baru. Selain itu, notifikasi CallStyle pada API versi 30 atau yang lebih lama dapat mencapai peringkat serupa dengan menandai notifikasi sebagai berwarna, menggunakan metode setColorized().

Gunakan Telecom API dengan notifikasi CallStyle. Untuk mengetahui informasi selengkapnya, lihat Ringkasan framework Telecom.