Tìm hiểu về Notification trong Android

1. Notification là gì ? Một notification là một thông điệp mà Android hiển thị bên ngoài giao diện ứng dụng của bạn để cung cấp cho người dùng lời nhắc, tin nhắn, hay bất kỳ thông tin gì từ ứng dụng của bạn. Người dùng có thể nhấn vào notification để mở ứng dụng,

1. Notification là gì ?

Một notification là một thông điệp mà Android hiển thị bên ngoài giao diện ứng dụng của bạn để cung cấp cho người dùng lời nhắc, tin nhắn, hay bất kỳ thông tin gì từ ứng dụng của bạn. Người dùng có thể nhấn vào notification để mở ứng dụng, hoặc thực hiện một hành động trực tiếp trên notification như gửi tin nhắn.

Ví dụ :

2. Channel trong Notification

Kể từ Android 8.0 trở lên, ta phải đăng ký notification channel của app với hệ thống, còn với những phiên bản thấp hơn thì nó sẽ được bỏ qua

class MyApplication : Application() {

    companion object{
        fun CHANNEL_ID_GAME() = "Channel Game"
    }

    override fun onCreate() {
        super.onCreate()

        // Create the NotificationChannel
        createNotificationChannel()
    }

    private fun createNotificationChannel() {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

            // Create the NotificationChannelGame
            val nameChanelGame = getString(R.string.channel_game_name)
            val descriptionTextChanelGame = getString(R.string.channel_game_description)
            val importanceChanelGame = NotificationManager.IMPORTANCE_DEFAULT
            val mChannelGame = NotificationChannel(MyApplication.CHANNEL_ID_GAME(), nameChanelGame, importanceChanelGame)
            mChannelGame.description = descriptionTextChanelGame

            // Register the channel with the system; you can't change the importance
            // or other notification behaviors after this
            val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
            notificationManager.createNotificationChannel(mChannelGame)
        }
    }
}

3. Cách tạo một Notification

3.1. Với phiên bản Android 8.0 trở xuống

val notification = NotificationCompat.Builder(this)
       .setContentTitle(CONTEND_TITLE_CHANEL_GAME)
       .setContentText(CONTENT_NOTIFICATION_CHANEL_GAME)
       .setSmallIcon(R.drawable.ic_baseline_videogame_asset_24)
       .setLargeIcon(bitmap)
       .setColor(resources.getColor(R.color.red))
       .setAutoCancel(true)
       .build()

Notification khi được khởi tạo

3.2. Với phiên bản Android 8.0 trở lên

Notification phải được gắn liền với 1 Channel ID được khởi tạo trước (như ví dụ tạo chanel trên)

val notification = NotificationCompat.Builder(this, MyApplication.CHANNEL_ID_GAME())
       .setContentTitle(CONTEND_TITLE_CHANEL_GAME)
       .setContentText(CONTENT_NOTIFICATION_CHANEL_GAME)
       .setSmallIcon(R.drawable.ic_baseline_videogame_asset_24)
       .setLargeIcon(bitmap)
       .setColor(resources.getColor(R.color.red))
       .setAutoCancel(true)
       .build()

Notification khi được khởi tạo

4. Quản lý Notification bằng Channel

Channel cho phép người dùng lựa chọn thông báo nào của ứng dụng được phép hiển thị. Nếu một ứng dụng chỉ sử dụng một channel để hiển thị tất cả các Notification, người dùng sẽ không thể lựa chọn Notification mà họ muốn xem, và nếu người dùng chặn một channel Notification thì có thể họ sẽ không bao giờ nhận được Notification từ ứng dụng nữa.

Ta sẽ khởi tạo 2 Chanel và xem sẽ có gì xảy ra

class MyApplication : Application() {

   companion object{
       fun CHANNEL_ID_GAME() = "Channel Game"
       fun CHANNEL_ID_JOB() = "Channel Job"
   }

   override fun onCreate() {
       super.onCreate()

       // Create the NotificationChannel
       createNotificationChannel()
   }

   private fun createNotificationChannel() {

       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

           // Create the NotificationChannelGame
           val nameChanelGame = getString(R.string.channel_game_name)
           val descriptionTextChanelGame = getString(R.string.channel_game_description)
           val importanceChanelGame = NotificationManager.IMPORTANCE_DEFAULT
           val mChannelGame = NotificationChannel(MyApplication.CHANNEL_ID_GAME(), nameChanelGame, importanceChanelGame)
           mChannelGame.description = descriptionTextChanelGame
           
           // Create the NotificationChannelJob
           val nameChanelJob = getString(R.string.channel_job_name)
           val descriptionTextChanelJob = getString(R.string.channel_job_description)
           val importanceChanelJob = NotificationManager.IMPORTANCE_DEFAULT
           val mChannelJob = NotificationChannel(MyApplication.CHANNEL_ID_JOB(), nameChanelJob, importanceChanelJob)
           mChannelJob.description = descriptionTextChanelJob

           // Register the channel with the system; you can't change the importance
           // or other notification behaviors after this
           val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
           notificationManager.createNotificationChannel(mChannelGame)
           notificationManager.createNotificationChannel(mChannelJob)
       }
   }
}

Khi ta mở phần Setting của ứng dụng ta sẽ thấy 2 Channel vừa tạo

Nếu tắt thông báo từ các Channel thì ta sẽ không nhận được thông báo từ Channel đó nữa cho đến khi ta mở thông báo lại

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ