Tổng quan về thông báo

Thông báo là thông báo mà Android hiển thị bên ngoài giao diện người dùng của ứng dụng để cung cấp cho người dùng lời nhắc, thông tin liên lạc từ người khác hoặc các thông tin kịp thời khác từ ứng dụng của bạn. Người dùng có thể nhấn vào thông báo để mở ứng dụng hoặc thực hiện một thao tác ngay từ thông báo.

Trang này cung cấp thông tin tổng quan về vị trí xuất hiện thông báo và các tính năng có sẵn. Để bắt đầu tạo thông báo, hãy đọc bài viết Tạo thông báo.

Để biết thêm thông tin về thiết kế thông báo và các mẫu tương tác, xem Hướng dẫn thiết kế thông báo.

Giao diện trên thiết bị

Thông báo tự động xuất hiện cho người dùng ở nhiều vị trí và định dạng. Thông báo xuất hiện dưới dạng biểu tượng trong thanh trạng thái, mục nhập chi tiết hơn trong ngăn thông báo và huy hiệu trên biểu tượng của ứng dụng. Thông báo cũng xuất hiện trên các thiết bị đeo đã ghép nối.

Thanh trạng thái và ngăn thông báo

Khi bạn đưa ra một thông báo, trước tiên, thông báo đó sẽ xuất hiện dưới dạng một biểu tượng trên thanh trạng thái.

Hình 1. Các biểu tượng thông báo xuất hiện ở bên trái thanh trạng thái.

Người dùng có thể vuốt xuống trên thanh trạng thái để mở ngăn thông báo. Tại đây, họ có thể xem thêm thông tin chi tiết và thao tác với thông báo.

Hình 2. Thông báo trong ngăn thông báo.

Người dùng có thể kéo một thông báo trong ngăn xuống để hiển thị thành phần hiển thị mở rộng. Thao tác này sẽ hiển thị thêm nội dung và các nút hành động, nếu có. Kể từ Android 13, thành phần hiển thị mở rộng này sẽ bao gồm một nút cho phép người dùng dừng ứng dụng có các dịch vụ đang chạy trên nền trước.

Một thông báo vẫn sẽ hiển thị trong ngăn thông báo cho đến khi bị ứng dụng hoặc người dùng đóng.

Thông báo quan trọng

Kể từ Android 5.0, thông báo có thể hiển thị nhanh trong một cửa sổ nổi gọi là thông báo quan trọng. Hành vi này thường dành cho các thông báo quan trọng mà người dùng cần biết ngay lập tức và chỉ xuất hiện khi thiết bị đã được mở khoá.

Hình 3. Một thông báo quan trọng sẽ xuất hiện phía trước ứng dụng trên nền trước.

Thông báo quan trọng sẽ xuất hiện khi ứng dụng của bạn gửi thông báo. Thông báo này sẽ biến mất sau giây lát, nhưng vẫn hiển thị trong ngăn thông báo như bình thường.

Các điều kiện có thể kích hoạt thông báo quan trọng bao gồm:

  • Hoạt động của người dùng hiện ở chế độ toàn màn hình, chẳng hạn như khi ứng dụng sử dụng fullScreenIntent.

  • Thông báo có mức độ ưu tiên cao và sử dụng nhạc chuông hoặc chế độ rung trên các thiết bị chạy Android 7.1 (API cấp 25) trở xuống.

  • Kênh thông báo có tầm quan trọng cao trên các thiết bị chạy Android 8.0 (API cấp 26) trở lên.

Màn hình khoá

Kể từ Android 5.0, thông báo có thể xuất hiện trên màn hình khoá.

Bạn có thể lập trình để thiết lập xem thông báo do ứng dụng của bạn đăng có hiển thị trên màn hình khoá bảo mật hay không và nếu có thì mức độ chi tiết sẽ hiển thị.

Người dùng có thể sử dụng phần cài đặt hệ thống để chọn mức độ hiển thị chi tiết trong thông báo trên màn hình khoá hoặc để tắt mọi thông báo trên màn hình khoá. Kể từ Android 8.0, người dùng có thể tắt hoặc bật thông báo trên màn hình khoá cho từng kênh thông báo.

Hình 4. Thông báo trên màn hình khoá có nội dung nhạy cảm bị ẩn.

Để tìm hiểu thêm, hãy xem phần Đặt chế độ hiển thị trên màn hình khoá.

Huy hiệu biểu tượng ứng dụng

Trong các trình chạy được hỗ trợ trên thiết bị chạy Android 8.0 (API cấp 26) trở lên, biểu tượng ứng dụng biểu thị các thông báo mới bằng một huy hiệu có màu, còn gọi là dấu chấm thông báo trên biểu tượng trình chạy ứng dụng tương ứng.

Người dùng có thể chạm và giữ biểu tượng ứng dụng để xem các thông báo của ứng dụng đó. Người dùng có thể đóng hoặc thao tác với thông báo từ trình đơn đó, tương tự như ngăn thông báo.

Hình 5. Huy hiệu thông báo cũng như trình đơn chạm và giữ.

Để tìm hiểu thêm về cách hoạt động của huy hiệu, hãy đọc bài viết Sửa đổi huy hiệu thông báo.

Thiết bị Wear OS

Nếu người dùng có thiết bị Wear OS được ghép nối, thì tất cả các thông báo của bạn sẽ tự động xuất hiện trên thiết bị đó, bao gồm cả các nút hành động và thông tin chi tiết có thể mở rộng.

Bạn có thể nâng cao trải nghiệm bằng cách tuỳ chỉnh giao diện của thông báo trên thiết bị đeo và bằng cách đưa ra nhiều thao tác, bao gồm cả câu trả lời đề xuất và câu trả lời nhập bằng giọng nói. Để biết thêm thông tin, hãy xem cách thêm các tính năng dành riêng cho thiết bị đeo vào thông báo.

Hình 6. Thông báo sẽ tự động xuất hiện trên thiết bị Wear OS được ghép nối.

Phân tích thông báo

Thiết kế của thông báo do các mẫu hệ thống xác định và ứng dụng của bạn xác định nội dung cho từng phần của mẫu. Một số thông tin của thông báo chỉ xuất hiện ở chế độ xem mở rộng.

Hình 7. Một thông báo cung cấp thông tin cơ bản.

Dưới đây là các phần phổ biến nhất của một thông báo được thể hiện trong hình 7:

  1. Biểu tượng nhỏ: bắt buộc; đặt bằng setSmallIcon().
  2. Tên ứng dụng: do hệ thống cung cấp.
  3. Dấu thời gian: do hệ thống cung cấp, nhưng bạn có thể ghi đè bằng cách sử dụng setWhen() hoặc ẩn bằng setShowWhen(false).
  4. Biểu tượng lớn: không bắt buộc; thường chỉ dùng cho ảnh của người liên hệ. Đừng sử dụng tên này cho biểu tượng ứng dụng. Đặt bằng setLargeIcon().
  5. Tiêu đề: không bắt buộc; đặt bằng setContentTitle().
  6. Văn bản: không bắt buộc; đặt bằng setContentText().

Bạn nên sử dụng các mẫu hệ thống để đảm bảo khả năng tương thích phù hợp về thiết kế trên mọi thiết bị. Nếu cần, bạn có thể tạo bố cục thông báo tuỳ chỉnh.

Để biết thêm thông tin về cách tạo thông báo có các tính năng này và nhiều tính năng khác, vui lòng đọc bài viết Tạo thông báo.

Hành động thông qua thông báo

Mặc dù không bắt buộc, nhưng bạn nên áp dụng phương pháp nên áp dụng cho mọi thông báo để mở một hoạt động ứng dụng thích hợp khi người dùng nhấn vào thông báo đó. Ngoài hành động mặc định này trong thông báo, bạn có thể thêm các nút hành động từ thông báo để hoàn tất một tác vụ liên quan đến ứng dụng (thường không cần mở hoạt động) như minh hoạ trong hình 8.

Hình 8. Một thông báo có các nút hành động.

Kể từ Android 7.0 (API cấp 24), bạn có thể thêm một thao tác để trả lời tin nhắn hoặc nhập văn bản khác ngay trong thông báo.

Kể từ Android 10 (API cấp 29), nền tảng có thể tự động tạo các nút hành động bằng các hành động dựa trên ý định đề xuất.

Bạn có thể xem thông tin giải thích kỹ hơn về cách thêm các nút hành động trong phần Tạo thông báo.

Yêu cầu thiết bị đã mở khoá

Người dùng có thể thấy các hành động thông báo trên màn hình khoá của thiết bị. Nếu thao tác thông báo khiến một ứng dụng khởi chạy một hoạt động hoặc gửi tin nhắn trả lời trực tiếp, thì người dùng phải mở khoá thiết bị trước khi ứng dụng có thể gọi thao tác thông báo đó.

Trên Android 12 (API cấp 31) trở lên, bạn có thể định cấu hình một hành động thông báo sao cho thiết bị phải được mở khoá để ứng dụng có thể gọi hành động đó, bất kể hành động đó khởi chạy quy trình công việc nào. Tuỳ chọn này thêm một lớp bảo mật bổ sung cho thông báo trên các thiết bị bị khoá.

Để yêu cầu mở khoá thiết bị trước khi ứng dụng gọi ra một hành động thông báo nhất định, hãy chuyển true vào setAuthenticationRequired() khi tạo hành động thông báo, như minh hoạ trong đoạn mã sau:

Kotlin

val moreSecureNotification = Notification.Action.Builder(...)

    // This notification always requests authentication when invoked
    // from a lock screen.
    .setAuthenticationRequired(true)
    .build()

Java

Notification moreSecureNotification = new Notification.Action.Builder(...)

    // This notification always requests authentication when invoked
    // from a lock screen.
    .setAuthenticationRequired(true)
    .build();

Thông báo có thể mở rộng

Theo mặc định, nội dung văn bản của thông báo sẽ bị cắt sao cho vừa đủ trong một dòng. Nếu muốn thông báo dài hơn, bạn có thể cho phép một vùng văn bản lớn hơn, có thể mở rộng bằng cách áp dụng một mẫu bổ sung, như trong hình 9.

Hình 9. Một thông báo có thể mở rộng để hiển thị nhiều văn bản.

Bạn cũng có thể tạo một thông báo có thể mở rộng bằng hình ảnh, theo kiểu hộp thư đến, có cuộc trò chuyện hoặc có bộ điều khiển chế độ phát nội dung nghe nhìn. Để biết thêm thông tin, hãy đọc bài viết Tạo thông báo có thể mở rộng.

Cập nhật thông báo và nhóm thông báo

Để tránh hiển thị nhiều thông báo hoặc thông báo dư thừa cho người dùng khi bạn có các bản cập nhật bổ sung, hãy cập nhật thông báo hiện có thay vì đưa ra thông báo mới hoặc sử dụng thông báo kiểu hộp thư đến để hiện thông tin cập nhật về cuộc trò chuyện.

Tuy nhiên, nếu cần đưa ra nhiều thông báo, hãy cân nhắc việc nhóm các thông báo riêng biệt thành một nhóm có trên Android 7.0 trở lên.

Nhóm thông báo cho phép bạn thu gọn nhiều thông báo vào một bài đăng trong ngăn thông báo có bản tóm tắt. Người dùng có thể mở rộng dần nhóm thông báo và từng thông báo trong nhóm để biết thêm thông tin, như minh hoạ trong hình 10.

Hình 10. Một nhóm thông báo được thu gọn và mở rộng.

Để tìm hiểu cách thêm thông báo vào nhóm, hãy xem phần Tạo nhóm thông báo.

Kênh thông báo

Kể từ Android 8.0 (API cấp 26), bạn phải chỉ định tất cả thông báo cho một kênh, nếu không các thông báo này sẽ không xuất hiện. Điều này cho phép người dùng tắt các kênh thông báo cụ thể cho ứng dụng của bạn thay vì tắt tất cả các thông báo. Người dùng có thể kiểm soát các tuỳ chọn hình ảnh và thính giác cho mỗi kênh trong phần cài đặt hệ thống Android, như minh hoạ trong hình 11. Người dùng cũng có thể chạm và giữ một thông báo để thay đổi hành vi của kênh liên kết.

Trên các thiết bị chạy Android 7.1 (API cấp 25) trở xuống, người dùng chỉ có thể quản lý thông báo trên cơ sở từng ứng dụng. Mỗi ứng dụng chỉ có một kênh trên Android 7.1 trở xuống một cách hiệu quả.

Hình 11. Chế độ cài đặt thông báo cho ứng dụng Đồng hồ và một trong các kênh của ứng dụng đó.

Một ứng dụng có thể có các kênh riêng cho từng loại thông báo mà ứng dụng gửi đi. Ứng dụng cũng có thể tạo các kênh thông báo để phản hồi các lựa chọn của người dùng. Ví dụ: bạn có thể thiết lập các kênh thông báo riêng cho từng nhóm trò chuyện do người dùng tạo trong một ứng dụng nhắn tin.

Kênh cũng là nơi bạn chỉ định mức độ quan trọng cho các thông báo trên Android 8.0 trở lên, vì vậy, tất cả các thông báo được đăng lên cùng một kênh thông báo đều có cùng hành vi. Điều này được mô tả trong phần sau.

Để biết thêm thông tin, hãy xem bài viết Tạo và quản lý kênh thông báo.

Mức độ quan trọng của thông báo

Android dựa vào mức độ quan trọng của thông báo để xác định mức độ làm gián đoạn âm thanh và hình ảnh của thông báo đối với người dùng. Thông báo càng có tầm quan trọng thì mức độ gián đoạn càng cao.

Trên Android 7.1 (API cấp 25) trở xuống, mức độ quan trọng của thông báo được xác định bằng priority của thông báo.

Trên Android 8.0 (API cấp 26) trở lên, mức độ quan trọng của thông báo được xác định theo importance của kênh mà thông báo được đăng lên. Người dùng có thể thay đổi tầm quan trọng của một kênh thông báo trong phần cài đặt hệ thống, như minh hoạ trong hình 12.

Hình 12. Người dùng có thể thay đổi mức độ quan trọng của từng kênh trên Android 8.0 trở lên.

Sau đây là các mức độ quan trọng có thể có và hành vi thông báo liên quan:

  • Khẩn cấp: phát ra âm thanh và xuất hiện dưới dạng thông báo quan trọng.

  • Cao: phát ra âm thanh.

  • Trung bình: không có âm thanh.

  • Thấp: không phát âm thanh và không xuất hiện trong thanh trạng thái.

Tất cả thông báo, bất kể mức độ quan trọng, đều xuất hiện ở các vị trí giao diện người dùng hệ thống không gây gián đoạn, chẳng hạn như trong ngăn thông báo và dưới dạng huy hiệu trên biểu tượng trình chạy. Tuy nhiên, bạn có thể sửa đổi hình thức của huy hiệu thông báo.

Để biết thêm thông tin, hãy đọc bài viết về cách đặt mức độ quan trọng.

Chế độ Không làm phiền

Kể từ Android 5.0 (API cấp 21), người dùng có thể bật chế độ Không làm phiền để tắt tiếng và rung đối với tất cả thông báo. Thông báo vẫn xuất hiện trong giao diện người dùng hệ thống như bình thường, trừ phi người dùng chỉ định khác.

Hiện có 3 cấp độ trong chế độ Không làm phiền:

  • Im lặng hoàn toàn: chặn tất cả âm thanh và tiếng rung, bao gồm cả báo thức, âm nhạc, video và trò chơi.
  • Chỉ báo thức: chặn tất cả âm thanh và tiếng rung, ngoại trừ báo thức.
  • Chỉ ưu tiên: người dùng có thể định cấu hình những danh mục nào trên toàn hệ thống có thể làm gián đoạn họ, chẳng hạn như chỉ chuông báo, lời nhắc, sự kiện, cuộc gọi hoặc tin nhắn. Đối với tin nhắn và cuộc gọi, người dùng có thể lọc dựa trên người gửi hoặc người gọi, như minh hoạ trong hình 13.

Hình 13. Người dùng có thể cho phép thông báo dựa trên các danh mục trên toàn hệ thống (bên trái) và người gửi hoặc người gọi (bên phải).

Ngoài ra, trên Android 8.0 (API cấp 26) trở lên, người dùng có thể cho phép thông báo cho các danh mục dành riêng cho ứng dụng (còn gọi là kênh) bằng cách ghi đè chế độ Không làm phiền trên cơ sở từng kênh. Ví dụ: ứng dụng thanh toán có thể có các kênh cho thông báo liên quan đến việc rút tiền và gửi tiền. Người dùng có thể cho phép thông báo rút tiền, thông báo gửi tiền hoặc cả hai khi ở chế độ ưu tiên.

Trên các thiết bị chạy Android 7.1 (API cấp 25) trở xuống, người dùng có thể cho phép thông báo trên cơ sở từng ứng dụng, thay vì trên cơ sở từng kênh.

Để định cấu hình thông báo cho các chế độ cài đặt này của người dùng, bạn phải đặt một danh mục trên toàn hệ thống.

Thông báo cho các dịch vụ trên nền trước

Bạn phải đưa ra thông báo khi ứng dụng của bạn đang chạy một dịch vụ trên nền trước – một Service chạy trong chế độ nền tồn tại lâu dài và dễ nhận thấy đối với người dùng, chẳng hạn như trình phát nội dung đa phương tiện. Bạn không thể loại bỏ thông báo này như các thông báo khác. Để xoá thông báo, bạn phải dừng hoặc xoá dịch vụ khỏi trạng thái nền trước.

Để biết thêm thông tin, hãy đọc bài viết Dịch vụ trên nền trước. Nếu bạn đang tạo trình phát nội dung nghe nhìn, hãy đọc bài viết Phát nội dung nghe nhìn trong nền.

Giới hạn về số bài đăng

Kể từ Android 8.1 (API cấp 27), các ứng dụng không được phát âm thanh thông báo nhiều hơn một lần mỗi giây. Nếu ứng dụng của bạn đăng nhiều thông báo trong một giây, các thông báo đều xuất hiện như mong đợi, nhưng chỉ thông báo đầu tiên trong mỗi giây phát ra âm thanh.

Tuy nhiên, Android cũng áp dụng giới hạn cho tốc độ cập nhật thông báo. Nếu bạn đăng thông tin cập nhật cho một thông báo quá thường xuyên (chẳng hạn như nhiều thông báo trong chưa đầy 1 giây), thì hệ thống có thể huỷ thông tin cập nhật.

Tính tương thích của thông báo

Giao diện người dùng hệ thống của thông báo Android và các API liên quan đến thông báo liên tục phát triển. Để sử dụng các tính năng mới nhất của API thông báo trong khi vẫn hỗ trợ các thiết bị cũ, hãy sử dụng API thông báo của Thư viện hỗ trợ, NotificationCompat và các lớp con của nó cũng như NotificationManagerCompat. Điều này cho phép bạn tránh phải viết mã có điều kiện để kiểm tra cấp độ API vì các API này xử lý việc đó.

NotificationCompat được cập nhật khi nền tảng phát triển để bao gồm các phương thức mới nhất. Tuy nhiên, khả năng sử dụng một phương thức trong NotificationCompat không đảm bảo rằng tính năng tương ứng sẽ được cung cấp trên các thiết bị cũ. Trong một số trường hợp, việc gọi một API mới ra mắt sẽ dẫn đến tình trạng không hoạt động trên các thiết bị cũ.

Sau đây là bản tóm tắt những thay đổi đáng chú ý nhất về hành vi theo cấp độ API đối với thông báo trên Android.

Android 5.0, API cấp 21

  • Giới thiệu màn hình khoá và thông báo quan trọng.

  • Cho phép người dùng đặt điện thoại ở chế độ Không làm phiền và định cấu hình những thông báo nào được phép làm gián đoạn họ khi thiết bị đang ở chế độ chỉ ưu tiên.

  • Thêm các phương thức để đặt xem thông báo có hiển thị trên màn hình khoá hay không (chẳng hạn như setVisibility()) và để chỉ định phiên bản "công khai" của văn bản thông báo.

  • Thêm phương thức setPriority() để cho hệ thống biết mức độ gián đoạn của thông báo. Ví dụ: khi đặt mức độ ưu tiên thành cao, thông báo sẽ xuất hiện dưới dạng thông báo quan trọng.

  • Bổ sung tính năng hỗ trợ ngăn xếp thông báo vào thiết bị Android Wear (hiện gọi là Wear OS). Đặt thông báo vào ngăn xếp bằng setGroup(). Các ngăn xếp thông báo (sau này gọi là nhóm hoặc gói) không được hỗ trợ trên máy tính bảng hoặc điện thoại cho đến Android 7.0 (API cấp 24).

Android 7.0, API cấp 24

  • Đổi kiểu cho các mẫu thông báo để làm nổi bật hình ảnh chính và hình đại diện.

  • Thêm 3 mẫu thông báo: một mẫu dành cho các ứng dụng nhắn tin và hai mẫu còn lại để trang trí khung hiển thị nội dung tuỳ chỉnh với khả năng mở rộng và các thành phần trang trí khác cho hệ thống.

  • Bổ sung tính năng hỗ trợ các thiết bị cầm tay (chẳng hạn như điện thoại và máy tính bảng) cho nhóm thông báo. Sử dụng cùng một API như ngăn xếp thông báo Android Wear (hiện gọi là Wear OS) ra mắt trong Android 5.0 (API cấp 21).

  • Cho phép người dùng trả lời trong thông báo bằng tính năng trả lời cùng dòng. Họ có thể nhập văn bản, sau đó văn bản này được chuyển đến ứng dụng mẹ của thông báo.

Android 8.0, API cấp 26

  • Giúp đưa từng thông báo vào một kênh cụ thể.

  • Cho phép người dùng tắt thông báo theo kênh, thay vì tắt mọi thông báo của một ứng dụng.

  • Làm cho các ứng dụng có thông báo đang hoạt động hiển thị huy hiệu thông báo ở đầu biểu tượng ứng dụng trên màn hình chính hoặc màn hình trình chạy.

  • Cho phép người dùng tạm ẩn thông báo khỏi ngăn. Bạn có thể đặt thời gian chờ tự động cho một thông báo.

  • Cho phép bạn đặt màu nền của thông báo.

  • Di chuyển một số API liên quan đến hành vi thông báo từ Notification sang NotificationChannel. Ví dụ: sử dụng NotificationChannel.setImportance() thay vì NotificationCompat.Builder.setPriority() cho Android 8.0 trở lên.

Android 13.0, API cấp 33

Android 14.0, API cấp 34

  • Giới hạn các thông báo về ý định truy cập chế độ toàn màn hình ở những ứng dụng cung cấp lệnh gọi và chuông báo. Hãy dùng API NotificationManager.canUseFullScreenIntent để kiểm tra xem ứng dụng của bạn có quyền hay không. Nếu không, ứng dụng của bạn có thể sử dụng ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT để chạy trang cài đặt nơi người dùng có thể cấp quyền.

  • Thay đổi cách người dùng trải nghiệm thông báo không đóng được bằng cách cho phép họ đóng thông báo ngay cả khi cờ Notification.FLAG_ONGOING_EVENT được đặt. Điều này không áp dụng cho các thông báo CallStyle nếu cờ Notification.FLAG_ONGOING_EVENT được đặt hoặc Trình kiểm soát chính sách thiết bị (DPC) và các gói hỗ trợ dành cho doanh nghiệp. Thao tác này cũng không áp dụng khi điện thoại đang bị khoá hoặc nếu người dùng chọn Xoá tất cả.