Skip to content
semua artikel

2 menit baca id

Menampilkan Notifikasi di Android 13

Notifikasi menginformasikan pengguna tentang event saat aplikasi tidak dibuka. Artikel ini membahas cara menampilkannya di Android 13 dengan Kotlin.

Notifikasi merupakan sebuah cara bagi suatu aplikasi untuk menginformasikan pengguna tentang event yang terjadi ketika aplikasi sedang tidak dibuka. Contoh event seperti pesan masuk ketika aplikasi sedang ditutup, pengumuman terkait fitur tertentu, perkiraan cuaca baru dan lain sebagainya. Artikel ini akan membahas cara menggunakan dan menampilkan notifikasi di Android dengan Kotlin.

Meminta Ijin Menampilkan Notifikasi #

Mulai dari Android 13, sebelum bisa menampilkan notifikasi kita harus meminta runtime permission terlebih dahulu. Pertama, kita siapkan dulu method untuk memeriksa apakah aplikasi sudah mendapatkan ijin, bila belum maka tampilkan popup-nya. Bila ijin ditolak, maka tampilkan snackbar untuk membuka halaman Settings dan mengijinkan permission Notification secara manual.

private val requestPermissionLauncher = registerForActivityResult(
    ActivityResultContracts.RequestPermission()
) { isGranted: Boolean ->
    if (isGranted) {
        Snackbar.make(findViewById(R.id.main), "Notifications permission granted", Snackbar.LENGTH_SHORT)
            .show()
    } else {
        Snackbar.make(
            findViewById(R.id.main),
            "${getString(R.string.app_name)} can't post notifications without Notification permission",
            Snackbar.LENGTH_INDEFINITE
        ).setAction("Open Settings") {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                val settingsIntent: Intent = Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
                    .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                    .putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
                startActivity(settingsIntent)
            }
        }.show()
    }
}

private fun askNotificationPermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.POST_NOTIFICATIONS) ==
            PackageManager.PERMISSION_GRANTED
        ) {
            // Lakukan sesuatu bila permission allowed
        } else {
            // Meminta ijin pengguna untuk menampilkan notification
            requestPermissionLauncher.launch(android.Manifest.permission.POST_NOTIFICATIONS)
        }
    }
}

Panggil method askNotificationPermission() di method onCreate().

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        askNotificationPermission()

        // kode-kode yang lain
    }

Popup izin notifikasi Android 13 dengan tombol Izinkan dan Jangan izinkan

Bila tidak user memilih jangan izinkan, maka user harus mengijinkannya lewat menu Settings.

Snackbar peringatan permission notifikasi dengan aksi Open Settings

Halaman Settings notifikasi aplikasi dengan switch Semua notifikasi aktif

Notification Channel #

Pada sistem Android sebelum Nougat, semua notifikasi dari satu aplikasi berada pada level yang sama. Ketika user memutuskan untuk tidak memperbolehkan suatu notifikasi, maka semua notifikasi tidak akan muncul. Pada versi Android yang baru sejak Nougat, diperkenalkan fitur bernama notification channel yang berfungsi untuk mengelompokkan notifikasi dari suatu aplikasi. Contoh untuk notifikasi iklan dibuat dengan channel sales, notifikasi percakapan dengan channel chat. dan lain-lain. Dengan begitu, bila kita tetap ingin menerima notifikasi terkait percakapan tapi tidak ingin menerima notifikasi dari penjualan, maka cukup matikan channel sales.

Selanjutnya, buat sebuah method untuk menampilkan notifikasi:

private fun showNotification() {
    val manager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager

    // 1
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && manager.getNotificationChannel(
            "announcement"
        ) == null
    ) {
        manager.createNotificationChannel(
            NotificationChannel(
                "announcement",
                "Pengumuman", NotificationManager.IMPORTANCE_DEFAULT
            )
        )
    }
    
    // 2
    val builder = NotificationCompat.Builder(this, "announcement")
    builder
        .setAutoCancel(true) 
        .setContentTitle("Pengumuman Aplikasi")
        .setContentText("Aplikasi akan menjalani maintenance bulanan dan tidak dapat diakses selama 2 jam.")
        .setSmallIcon(android.R.drawable.star_on) 

    // 3
    val intent = Intent(this, MainActivity::class.java)
    val pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) // 4
    builder.setContentIntent(pendingIntent)

    // 5
    manager.notify(212, builder.build())
}
  1. Kita periksa terlebih dahulu apakah sudah ada notification channel dengan id yang kita inginkan, dalam contoh ini adalah channel “announcement”. Jika belum ada maka buat channel baru.
  2. Berikutnya kita membuat objek notification builder baru dan mengatur:
    • setAutoCancel: Bila true maka notifikasi akan hilang saat di klik
    • setContentTitle: Mengatur judul notifikasi
    • setContentText: Mengatur body notifikasi
    • setSmallIcon: Mengatur icon yang akan tampil di tray notifikasi.
  3. Mengatur PendingIntent atau intent yang akan aktif ketika notifikasi di klik, pada contoh di atas kita akan membuka MainActivity.
  4. Untuk Android 12 ke atas, setiap pending intent wajib memiliki PendingIntent.FLAG_IMMUTABLE atau PendingIntent.FLAG_MUTABLE, jika tidak aplikasi akan crash.
  5. Meminta notification manager untuk menampilkan notifikasi.

Berikutnya panggil method showNotification() pada tempat yang dibutuhkan. Contohnya di sini penulis menampilkan notifikasi saat sebuah button di klik.

val button = findViewById<Button>(R.id.showNotification)
button.setOnClickListener {
    showNotification()
}

Notifikasi Pengumuman Aplikasi tampil di tray notifikasi Android

Tampilan notifikasi

Apabila pembaca membuka membuka halaman Info aplikasi (application info), pembaca bisa melihat semua channel yang dimiliki aplikasi tersebut diikuti engan sebuah switch untuk menonaktifkan channel tertentu.

Halaman info aplikasi menampilkan channel notifikasi Pengumuman dengan switch aktif

Semoga artikel ini bermanfaat.