Notification Channel — định nghĩa, các loại và cách hoạt động trong Android

Tác giả: IT Sectr Đã đăng: 2026-03-20 Thời gian đọc: 8 phút

Notification Channel (kênh thông báo) là một cơ chế Android, được giới thiệu trong phiên bản 8.0 (API 26), nhóm các thông báo theo danh mục và cho người dùng kiểm soát hành vi của chúng. Mỗi kênh xác định mức độ quan trọng, âm thanh, rung và hình thức trực quan cho tất cả các thông báo được gửi qua nó. Theo Android Developers, NotificationChannel là bắt buộc cho tất cả các thông báo trên Android 8+ — nếu không có nó, thông báo sẽ không được hiển thị.

Các điểm chính

  • Notification Channel — danh mục thông báo Android 8+ quản lý hành vi của một nhóm thông báo
  • Tính bắt buộc — trên Android 8+, mỗi thông báo phải có kênh, nếu không thì không được hiển thị
  • Mức độ quan trọng — mức độ quan trọng của kênh (IMPORTANCE_HIGH, DEFAULT, LOW, MIN) xác định cách hiển thị
  • Kiểm soát người dùng — người dùng có thể cấu hình từng kênh riêng lẻ trong cài đặt hệ thống
  • Nhóm kênh — NotificationChannelGroup nhóm các kênh trực quan trong giao diện cài đặt

Notification Channel là gì?

Notification Channel là một container logic cho các thông báo cùng loại trong Android 8+ (Oreo). Nhà phát triển tạo một kênh với ID duy nhất, thiết lập các tham số của nó, sau đó gửi từng thông báo với kênh này. Tất cả các thông báo trong cùng một kênh kế thừa các cài đặt của nó.

Trước Android 8, việc quản lý thông báo là nhị phân: tất cả hoặc không có gì. Người dùng chỉ có thể tắt hoàn toàn tất cả các thông báo của ứng dụng. Các kênh đã giải quyết vấn đề này: giờ đây bạn có thể tắt các thông báo “quảng cáo” nhưng giữ lại các “tin nhắn từ bạn bè.”

Sau khi tạo kênh, mức độ quan trọng của nó có thể được thay đổi bởi người dùng bất kỳ lúc nào qua Cài đặt → Ứng dụng → Thông báo. Nhà phát triển không thể thay đổi mức độ quan trọng bằng mã sau khi tạo kênh — đây là hạn chế bảo mật của Android.

Tính bắt buộc của kênh

Trên Android 8+, mỗi thông báo phải được gửi qua NotificationChannel. Nếu ứng dụng cố gắng hiển thị thông báo mà không có kênh, hệ thống sẽ im lặng bỏ qua nó. Ngoại lệ là các thông báo qua NotificationCompat với kênh mặc định, được thư viện tự động tạo.

Các kênh thông báo hoạt động như thế nào trong Android?

Một kênh thông báo được xác định bởi một tập các tham số được thiết lập khi tạo thông qua lớp NotificationChannel. Tham số chính là mức độ quan trọng, xác định cách thông báo tương tác với người dùng.

  • ID kênh — một chuỗi duy nhất (ví dụ: “messages”), được sử dụng khi gửi mỗi thông báo
  • Tên kênh — tên có thể đọc được hiển thị cho người dùng trong cài đặt
  • Mô tả — giải thích kênh dùng để làm gì, hiển thị trong cài đặt dưới tên
  • Mức độ quan trọng — mức từ IMPORTANCE_NONE đến IMPORTANCE_HIGH, xác định cách hiển thị
  • Âm thanh và rung — được cấu hình riêng cho từng kênh khi tạo

Sau khi tạo, kênh xuất hiện trong cài đặt thông báo hệ thống. Người dùng có thể thay đổi mức độ quan trọng, tắt âm thanh, rung hoặc chặn hoàn toàn kênh. Tất cả các thay đổi có hiệu lực ngay lập tức cho tất cả các thông báo tiếp theo.

Các tham số cấu hình kênh

Khi tạo NotificationChannel, bạn có thể cấu hình: âm thanh (tùy chỉnh hoặc hệ thống), rung (mẫu và thời gian), đèn báo (màu LED), biểu tượng huy hiệu (setShowBadge), màn hình khóa (setLockscreenVisibility) và chế độ không làm phiền (setBypassDnd). Các tham số này được cố định khi tạo kênh và chỉ có thể được thay đổi bởi người dùng sau đó.

Mức độ quan trọng: bảng so sánh

Mức độ quan trọng là tham số chính của kênh. Nó xác định xem thông báo có phát âm thanh, xuất hiện trên màn hình hay chỉ được đặt trong bóng tối. Mức độ quan trọng không nên nhầm lẫn với ưu tiên — mức độ quan trọng do kênh đặt, và ưu tiên (setPriority) bị bỏ qua trên Android 8+.

MứcHằng sốHành viÂm thanh
HIGHIMPORTANCE_HIGH (4)Hiển thị biểu ngữ heads-up, xuất hiện trong bóng tối
DEFAULTIMPORTANCE_DEFAULT (3)Xuất hiện trong bóng tối, không có heads-up
LOWIMPORTANCE_LOW (2)Xuất hiện trong bóng tối không âm thanhKhông
MINIMPORTANCE_MIN (1)Chỉ trong bóng tối, không âm thanh hoặc rungKhông
NONEIMPORTANCE_NONE (0)Không được hiển thị chút nàoKhông

Hầu hết các kịch bản người dùng, hãy sử dụng IMPORTANCE_DEFAULT (3) — thông báo sẽ xuất hiện trong bóng tối với âm thanh nhưng không có biểu ngữ pop-up. Sử dụng IMPORTANCE_HIGH chỉ cho các sự kiện quan trọng: cuộc gọi đến, tin nhắn từ liên hệ, lời nhắc hẹn giờ.

Tạo kênh trong mã Android

Kênh được tạo một lần khi ứng dụng khởi động hoặc khi sử dụng lần đầu. Thực hành tốt nhất là tạo tất cả các kênh khi khởi động ứng dụng, trong phương thức Application.onCreate. Việc tạo lại một kênh đã tồn tại là an toàn — Android sẽ bỏ qua lời gọi nếu kênh đã tồn tại.

kotlin
class App : Application() {

    override fun onCreate() {
        super.onCreate()
        createNotificationChannels()
    }

    private fun createNotificationChannels() {
        val messagesChannel = NotificationChannel(
            CHANNEL_MESSAGES,
            "Tin nhắn",
            NotificationManager.IMPORTANCE_HIGH
        ).apply {
            description = "Thông báo tin nhắn mới"
            enableVibration = true
            setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
        }

        val promoChannel = NotificationChannel(
            CHANNEL_PROMO,
            "Khuyến mãi và tin tức",
            NotificationManager.IMPORTANCE_LOW
        ).apply {
            description = "Thông báo tiếp thị và ưu đãi đặc biệt"
            setShowBadge(false)
        }

        val manager = getSystemService(NotificationManager::class.java)
        manager.createNotificationChannel(messagesChannel)
        manager.createNotificationChannel(promoChannel)
    }

    companion object {
        const val CHANNEL_MESSAGES = "messages"
        const val CHANNEL_PROMO = "promo"
    }
}

Khi gửi thông báo, hãy chỉ định ID kênh qua setChannelId (cho NotificationCompat) hoặc trong hàm tạo Notification.Builder. Nếu kênh với ID được chỉ định không tồn tại, thông báo sẽ không được hiển thị, nhưng sẽ không có lỗi nào xảy ra.

Quản lý và chỉnh sửa kênh

Android cung cấp một số API để quản lý kênh bằng mã: lấy danh sách, xóa và kiểm tra cài đặt hiện tại. Xóa một kênh sẽ khiến tất cả các thông báo của nó bị xóa khỏi lịch sử hệ thống.

kotlin
val manager =
    getSystemService(NotificationManager::class.java)

// Lấy danh sách tất cả kênh
val channels = manager.getNotificationChannels()
channels.forEach { channel ->
    Log.d("Kênh", "${channel.id}: ${channel.importance}")
}

// Biết mức độ quan trọng hiện tại (người dùng có thể đã thay đổi)
val channel = manager.getNotificationChannel(CHANNEL_MESSAGES)
if (channel.importance == NotificationManager.IMPORTANCE_NONE) {
    // Người dùng đã tắt kênh
    suggestEnablingChannel()
}

// Xóa kênh
manager.deleteNotificationChannel(CHANNEL_PROMO)

Sau khi kênh được tạo, nhà phát triển không thể thay đổi mức độ quan trọng của nó bằng mã — đây là hạn chế của Android để bảo vệ người dùng khỏi lạm dụng. Nếu bạn cần thay đổi mức độ quan trọng của kênh, hãy tạo một kênh mới với ID khác và di chuyển các thông báo.

Di chuyển khi thay đổi mức độ quan trọng

Nếu bạn cần thay đổi mức độ quan trọng của một kênh hiện có, hãy tạo một kênh mới với ID khác (ví dụ: “messages_v2”) và bắt đầu gửi thông báo đến nó. Kênh cũ có thể bị xóa qua deleteNotificationChannel — tất cả các thông báo của nó sẽ bị xóa khỏi lịch sử. Hãy cảnh báo người dùng về việc di chuyển qua giao diện ứng dụng để họ không mất cài đặt.

Nhóm kênh (NotificationChannelGroup)

NotificationChannelGroup kết hợp nhiều kênh thành một nhóm trực quan trong giao diện cài đặt Android. Các nhóm giúp người dùng điều hướng khi ứng dụng sử dụng 5+ kênh: ví dụ, “Xã hội,” “Hệ thống,” “Tiếp thị.”

Một nhóm được tạo qua createNotificationChannelGroup và được truyền cho kênh khi tạo thông qua phương thức setGroup. Xóa một nhóm cũng xóa tất cả các kênh của nó. Mỗi kênh chỉ có thể thuộc về một nhóm.

Trong thực tế, các nhóm kênh được khuyến nghị cho các ứng dụng có hơn 3 kênh. Chúng đơn giản hóa việc điều hướng trong cài đặt và giảm khả năng người dùng tắt tất cả thông báo cùng một lúc mà không hiểu danh sách kênh.

Ví dụ tạo nhóm kênh

Một nhóm được tạo qua createNotificationChannelGroup với ID và tên duy nhất. Sau đó, mỗi kênh được gán cho nhóm thông qua phương thức setGroup. Trong cài đặt hệ thống, nhóm xuất hiện dưới dạng một phần với tiêu đề, bên dưới là tất cả các kênh của nhóm này. Nếu một nhóm bị xóa, tất cả các kênh của nó cũng bị hệ thống tự động xóa mà không thể khôi phục.

Các mẫu thiết kế kênh

Thiết kế kênh thông báo phù hợp ảnh hưởng trực tiếp đến trải nghiệm người dùng và khả năng giữ chân người dùng. Mẫu chính là ba mức độ quan trọng: kênh quan trọng (IMPORTANCE_HIGH) cho tin nhắn và cuộc gọi, tiêu chuẩn (IMPORTANCE_DEFAULT) cho thông báo chung và im lặng (IMPORTANCE_LOW) cho tiếp thị và tin tức. Sự phân cấp này cho người dùng một lựa chọn rõ ràng mà không quá tải.

Mẫu thứ hai là một kênh cho mỗi mô-đun chức năng. Mỗi mô-đun chính của ứng dụng (trò chuyện, đơn hàng, bảng tin, tiếp thị) có kênh riêng. Nếu có hơn 5 mô-đun, hãy kết hợp chúng thành một NotificationChannelGroup. Trong cài đặt hệ thống, nhóm xuất hiện dưới dạng một phần với các mục có thể thu gọn — điều này đơn giản hóa việc điều hướng.

Mẫu thứ ba là kênh nhà phát triển. Tạo một kênh riêng với IMPORTANCE_MIN cho các thông báo gỡ lỗi và dịch vụ. Người dùng sẽ không thấy chúng trong bóng tối, nhưng nhà phát triển có thể phân tích nhật ký qua adb. Trong môi trường Production, kênh này có thể bị xóa hoặc ẩn khỏi giao diện qua Intent trong cài đặt.

Mẫu thứ tư là phản hồi kênh. Hiển thị cho người dùng trong giao diện kênh nào đang hoạt động và mức độ quan trọng hiện tại của chúng. Trên Android 8+, bạn có thể lấy trạng thái kênh qua getNotificationChannel và đề nghị người dùng thay đổi cài đặt nếu kênh bị tắt. Điều này đặc biệt quan trọng đối với các chức năng quan trọng của ứng dụng.

Các câu hỏi thường gặp

Điều gì sẽ xảy ra nếu tôi không tạo kênh trên Android 8+?

Thông báo sẽ không được hiển thị trong bóng tối hoặc khay thông báo. Hệ thống im lặng bỏ qua lời gọi notify(). Ngoại lệ: khi sử dụng NotificationCompat, thư viện sẽ tạo một kênh mặc định, nhưng mức độ quan trọng của nó luôn là DEFAULT. Luôn được khuyến nghị tạo các kênh của riêng bạn.

Tôi có thể thay đổi kênh sau khi tạo không?

Bạn có thể thay đổi tên, mô tả và âm thanh của kênh. Bạn không thể thay đổi mức độ quan trọng — quyết định này được hệ thống bảo vệ khỏi nhà phát triển. Nếu bạn cần tăng mức độ quan trọng, hãy tạo một kênh mới với ID khác và sử dụng nó cho các thông báo mới. Người dùng có thể thay đổi mức độ quan trọng bất kỳ lúc nào.

Làm thế nào để kiểm tra xem người dùng đã tắt kênh chưa?

Sử dụng getNotificationChannel và kiểm tra mức độ quan trọng: nếu giá trị là IMPORTANCE_NONE, kênh đã bị tắt. Bạn cũng có thể mở cài đặt hệ thống của kênh qua Intent: Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS với các tham số app_package và channel_id.

Có thể tạo bao nhiêu kênh trong một ứng dụng?

Không có giới hạn — Android không đặt giới hạn về số lượng kênh. Tuy nhiên, khuyến nghị không tạo quá 5–10 kênh để tránh làm người dùng choáng ngợp với các lựa chọn. Mức tối thiểu tối ưu là 2–3 kênh: thông báo quan trọng, thông thường và tiếp thị.

Các kênh có hoạt động trên Android 7 trở xuống không?

Trên Android 7.1 (API 25) trở xuống, các kênh không được hỗ trợ. Lớp NotificationChannel chỉ khả dụng từ API 26. Để tương thích ngược, hãy sử dụng NotificationCompat và bọc việc tạo kênh trong điều kiện: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O).

Tổng kết

  • Notification Channel — cơ chế nhóm thông báo Android 8+, bắt buộc để hiển thị
  • Mức độ quan trọng — mức từ NONE đến HIGH, xác định âm thanh, heads-up và khả năng hiển thị trong bóng tối
  • Quản lý — người dùng có thể thay đổi mức độ quan trọng và âm thanh kênh bất kỳ lúc nào
  • Tạo — kênh được tạo một lần qua NotificationManager.createNotificationChannel
  • Mức độ quan trọng không thể thay đổi — nhà phát triển không thể tăng mức độ quan trọng sau khi tạo kênh
  • Nhóm — NotificationChannelGroup kết hợp các kênh để điều hướng thuận tiện trong cài đặt
  • Tương thích — trên Android 7- sử dụng NotificationCompat với kiểm tra phiên bản SDK

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm