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 panggilan yang sedang berlangsung. Template ini mendukung notifikasi format besar yang menyertakan informasi penelepon dan tindakan yang diperlukan seperti menjawab atau menolak panggilan.

Karena panggilan masuk dan sedang berlangsung merupakan peristiwa prioritas tinggi, notifikasi ini menerima prioritas teratas di menu notifikasi. Urutan ini juga memungkinkan sistem untuk meneruskan panggilan yang diprioritaskan ini ke perangkat lain.

Template notifikasi CallStyle menyertakan tindakan wajib berikut:

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

Tindakan dalam gaya ini muncul sebagai tombol, dengan sistem yang otomatis menambahkan ikon dan teks yang sesuai. Pelabelan manual tombol 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 panggilan yang sedang berlangsung.

Tindakan yang diperlukan diteruskan sebagai intent, seperti hangupIntent dan answerIntent di bagian berikut. Masing-masing 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 bahwa PendingIntent dapat digunakan meskipun aplikasi yang membuatnya tidak lagi berjalan. Saat Anda memberikan PendingIntent ke aplikasi lain, Anda memberinya izin 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)

Memberikan kompatibilitas di lebih banyak versi Android

Kaitkan notifikasi CallStyle di API versi 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 di API versi 30 atau yang lebih lama dapat mencapai peringkat yang serupa dengan menandai notifikasi sebagai berwarna, menggunakan metode setColorized().

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