Register now for Android Dev Summit 2019!

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

Thông báo là nội dung mà Android hiển thị ở bên ngoài giao diện người dùng ứng dụng của bạn để cho người dùng biết lời nhắc, thông tin liên lạc từ mọi người hay các thông tin kịp thời khác từ ứng dụng. Người dùng có thể nhấn vào thông báo để mở ứng dụng của bạn hoặc thực hiện một hành động 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. Nếu bạn muốn bắt đầu tạo thông báo, hãy đọc Tạo thông báo .

Để biết thêm thông tin về các mẫu tương tác và thiết kế, hãy xem Hướng dẫn thiết kế thông báo. Ngoài ra, hãy xem Mẫu thông báo của Android để biết các phương pháp hay nhất khi sử dụng API Notification.Style cho cả ứng dụng trên di động và thiết bị đeo.

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

Thông báo được tự động hiển thị cho người dùng ở nhiều vị trí và định dạng, chẳng hạn như biểu tượng trong thanh trạng thái, mục nhập có thông tin chi tiết hơn trong ngăn thông báo, huy hiệu trên biểu tượng của ứng dụng và trên các thiết bị đeo được 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 biểu tượng trong thanh trạng thái.

Hình 1. 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, nơi họ có thể xem thêm thông tin và thực hiện các hành động 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ị chế độ xem 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ó.

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

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. Kiểu thông báo 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ở khóa.

Hình 3. Một thông báo quan trọng xuất hiện phía trước ứng dụng đang chạy ở 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 và sẽ biến mất sau một khoảng thời gian ngắn. Tuy nhiên, thông báo này vẫn sẽ hiển thị trong ngăn thông báo như thường lệ.

Sau đây là ví dụ về các trường hợp có thể kích hoạt thông báo quan trọng:

  • Hoạt động của người dùng hiện ở chế độ toàn màn hình (ứ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ó mức độ 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 khóa

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

Bạn có thể lập trình mức độ hiển thị chi tiết trong thông báo do ứng dụng của bạn đăng trên màn hình khóa bảo mật, hay thậm chí lập trình việc thông báo có hiển thị trên màn hình khóa hay không.

Người dùng có thể sử dụng các tùy chọ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 khóa, bao gồm cả tùy chọn tắt tất cả các thông báo trên màn hình khóa. Kể từ Android 8.0, người dùng có thể chọn tắt hoặc bật thông báo trên màn hình khóa cho từng kênh thông báo.

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

Để tìm hiểu thêm, hãy xem Đặt chế độ hiển thị màn hình khóa.

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ể nhấn và giữ biểu tượng ứng dụng để xem các thông báo của ứng dụng đó. Tiếp đến, người dùng có thể loại bỏ hoặc thực hiện hành động trên các thông báo trong menu đó, tương tự như với ngăn thông báo.

Hình 5. Huy hiệu thông báo và menu hiển thị khi nhấn và giữ

Để tìm hiểu thêm về cách hoạt động của huy hiệu, hãy đọc 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, tất cả thông báo của bạn sẽ tự động xuất 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ũng có thể đem đến cho người dùng trải nghiệm tốt hơn bằng cách tùy chỉnh giao diện của thông báo trên các thiết bị đeo và đưa ra những hành động khác nhau, 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 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 quyết định—ứng dụng của bạn chỉ cầ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. Thông báo có các thông tin cơ bản

Bên dưới là các phần thường gặp nhất của một thông báo như chỉ ra trong hình 7:

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

Để biết thêm thông tin về cách tạo thông báo có các đặc điểm này và những đặc điểm khác, hãy đọc phần 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 khi người dùng nhấn vào thông báo, mọi thông báo nên mở ra một hoạt động thích hợp trong ứng dụng. 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 trong thông báo để hoàn tất một nhiệm vụ liên quan đến ứng dụng (thường không phải là mở một hoạt động), như trong hình 9.

Hình 9. 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ũng có thể thêm một hành động để trả lời tin nhắn hoặc để nhập văn bản khác ngay trong thông báo.

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.

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 nội dung thông báo dài hơn, bạn có thể cho phép một diện tích hiển thị văn bản lớn hơn, có thể mở rộng bằng cách áp dụng mẫu bổ sung, như trong hình 8.

Hình 8. Một thông báo có thể mở rộng để hiển thị nhiều nội dung hơn

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

Mặc dù nên sử dụng các mẫu này để đảm bảo độ tương thích chính xác về mặt thiết kế trên tất cả các thiết bị, nhưng nếu cần thiết, bạn cũng có thể tạo một bố cục thông báo tùy chỉnh.

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

Trong trường hợp có thêm thông tin cập nhật, để tránh làm phiền người dùng do gửi nhiều thông báo hoặc do gửi thông báo không cần thiết, bạn nên cân nhắc cập nhật thông báo hiện có thay vì gửi thông báo mới hoặc cân nhắc sử dụng thông báo kiểu hộp thư đến để hiển thị thông tin cập nhật cho cuộc trò chuyện.

Tuy nhiên, nếu cần đưa ra nhiều thông báo, bạn nên xem xét việc nhóm các thông báo riêng biệt đó thành một nhóm (có thể dùng tính năng này trên Android 7.0 trở lên). Một 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, với một đoạn tóm tắt. Sau đó, người dùng có thể mở rộng thông báo để hiển thị thông tin chi tiết của từng thông báo riêng lẻ.

Người dùng có thể mở rộng dần dần nhóm thông báo và từng thông báo trong nhóm để xem thêm thông tin.

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 kênh cho tất cả thông báo thì thông báo mới xuất hiện. Bằng cách phân loại thông báo vào các kênh, người dùng có thể tắt các kênh thông báo cụ thể của ứng dụng (thay vì tắt tất cả các thông báo), đồng thời có thể kiểm soát các tùy chọn hình ảnh và âm thanh cho từng kênh—tất cả đều trong phần cài đặt hệ thống của Android (hình 11). Ngoài ra, người dùng còn có thể nhấn và giữ một thông báo để thay đổi cách hoạt động 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 (việc này hiệu quả khi mỗi ứng dụng chỉ có 1 kênh trên Android 7.1 trở xuống).

Hình 11. Các tùy chọn cài đặt thông báo của ứng dụng Đồng hồ và một trong các kênh thông báo của ứng dụng đó

Một ứng dụng có thể có nhiều kênh thông báo—mỗi loại thông báo mà ứng dụng gửi sẽ có một kênh riêng. Một ứng dụng cũng có thể tạo các kênh thông báo tương ứng với lựa chọn của người dùng trong ứng dụng. Ví dụ: bạn có thể thiết lập kênh thông báo riêng cho từng nhóm cuộc trò chuyện do người dùng tạo trong ứng dụng nhắn tin.

Kênh cũng là nơi bạn chỉ định mức độ quan trọng cho thông báo của mình trên Android 8.0 trở lên. Vì vậy, tất cả các thông báo đăng lên cùng một kênh đều có cùng cách hoạt động.

Để biết thêm thông tin, hãy xem phần 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 xem thông báo nên làm gián đoạn người dùng ở mức nào (hình ảnh và âm thanh) Thông báo càng quan trọng thì mức độ gián đoạn càng cao.

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 thông số importance của kênh mà thông báo đăng lên. Người dùng có thể thay đổi mức độ quan trọng của một kênh thông báo trong phần cài đặt hệ thống (hình 12). Trên Android 7.1 (API cấp 25) trở xuống, mức độ quan trọng của từng thông báo được xác định theo thông số priority của thông báo.

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ó:

  • Khẩn cấp: Thông báo xuất hiện dưới dạng thông báo quan trọng và có âm thanh.
  • Cao: Có âm thanh.
  • Trung bình: Không có âm thanh.
  • Thấp: Không có âm thanh và không xuất hiện trong thanh trạng thái.

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

Để biết thêm thông tin, hãy xem cách thiết lập 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 âm thanh và tiếng rung cho tất cả cá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ư thường lệ, trừ khi người dùng chỉ định khác.

Có 3 cấp độ khác nhau trong chế độ Không làm phiền, đó là:

  • 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 hệ thống có thể làm gián đoạn họ (chẳng hạn như chỉ báo thức, lời nhắc, 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ũng có thể chọn để lọc dựa trên người gửi hoặc người gọi (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 toàn hệ thống (trái) và dựa trên người đã gửi tin nhắn hoặc người đang gọi (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 thông qua 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 đè Không làm phiền trên cơ sở từng kênh một. Ví dụ: một ứng dụng thanh toán có thể có các kênh cho thông báo liên quan đến tiền rút và tiền gửi. Sau đó, người dùng có thể chọn 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 một, thay vì trên cơ sở từng kênh một.

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

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

Bạn cần có thông báo khi ứng dụng của bạn đang chạy một "dịch vụ ở nền trước"—một Service chạy trong nền hoạt động lâu dài và đáng chú ý với người dùng, chẳng hạn như trình phát nội dung nghe nhìn. Bạn không thể loại bỏ thông báo này như các thông báo khác. Để xóa thông báo này, bạn phải dừng dịch vụ hoặc loại bỏ dịch vụ khỏi trạng thái "nền trước".

Để biết thêm thông tin, hãy đọc phần Chạy một dịch vụ ở nền trước. Ngoài ra, nếu bạn đang tạo một trình phát nội dung nghe nhìn, hãy đọc phần Sử dụng thông báo MediaStyle với dịch vụ ở nền trước.

Giới hạn đăng

Kể từ Android 8.1 (API cấp 27), các ứng dụng không được phát âm thanh cho thông báo quá 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 (quá nhiều trong chưa đầy 1 giây), thì hệ thống có thể hủy một số thông tin cập nhật.

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

Kể từ Android 1.0, giao diện người dùng hệ thống của thông báo và API liên quan đến thông báo đã không ngừng thay đổi. Để 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 dùng API thông báo trong thư viện hỗ trợ: NotificationCompat và các lớp phụ của API đó, cũng như NotificationManagerCompat. Qua đó, bạn sẽ không phải viết mã điều kiện để kiểm tra cấp của API vì những API này sẽ xử lý điều đó cho bạn.

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. Cần lưu ý rằng khả năng sử dụng của một phương thức trong NotificationCompat không đảm bảo rằng các thiết bị cũ cũng sẽ có tính năng tương ứng. Trong một số trường hợp, việc gọi API mới ra mắt lại dẫn đến tình trạng không hoạt động trên các thiết bị cũ. Ví dụ: NotificationCompat.addAction() chỉ hiển thị nút hành động trên thiết bị chạy Android 4.1 (API cấp 16) trở lên.

Sau đây là phần tóm tắt những thay đổi đáng chú ý nhất về cách hoạt động của thông báo trên Android.

Android 4.1, API cấp 16

  • Đã giới thiệu các mẫu thông báo có thể mở rộng (gọi là kiểu thông báo), từ đó cho phép diện tích nội dung thông báo rộng hơn để hiển thị thông tin. Người dùng có thể sử dụng cử chỉ vuốt lên/xuống bằng một ngón tay để mở rộng thông báo.
  • Ngoài ra, đã giới thiệu khả năng thêm hành động bổ sung, dưới dạng các nút, vào thông báo.
  • Đã thêm khả năng để người dùng tắt thông báo trên cơ sở ứng dụng trong phần cài đặt.

Android 4.4, API cấp 19 và 20

  • Đã thêm dịch vụ Trình nghe thông báo vào API.
  • Đã thêm tính năng hỗ trợ cho Android Wear (hiện gọi là Wear OS) trong API cấp 20.

Android 5.0, API cấp 21

  • Đã giới thiệu màn hình khóa và thông báo quan trọng.
  • Giờ đây, người dùng có thể đặ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ị ở chế độ chỉ ưu tiên.
  • Đã thêm các phương thức để API thiết lập xem có hiển thị một thông báo trên màn hình khóa (setVisibility()) hay không và để xác đị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() nhằm cho hệ thống biết “mức độ gián đoạn” nên có của thông báo này (ví dụ: nếu đặt mức độ gián đoạn là cao, thì thông báo sẽ xuất hiện dưới dạng thông báo quan trọng).
  • Đã thêm tính năng hỗ trợ ngăn xếp thông báo cho các 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(). Lưu ý rằng ngăn xếp thông báo chưa được hỗ trợ trên máy tính bảng và điện thoại. Sau này, ngăn xếp thông báo sẽ được gọi là nhóm hoặc gói.

Android 7.0, API cấp 24

  • Các mẫu thông báo đã được định kiểu lại để 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 cho các ứng dụng nhắn tin và hai mẫu còn lại để trang trí cho chế độ xem nội dung tùy chỉnh với khả năng mở rộng và các phần trang trí hệ thống khác.
  • Đã thêm tính năng hỗ trợ các thiết bị cầm tay (đ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ư Android Wear (hiện gọi là Wear OS) cho ngăn thông báo được giới thiệu trong Android 5.0 (API cấp 21).
  • Người dùng có thể trả lời ngay trong thông báo (họ có thể nhập văn bản, sau đó câu trả lời sẽ chuyển đến ứng dụng chính của thông báo) bằng câu trả lời nội tuyến.

Android 8.0, API cấp 26

  • Ở phiên bản này, các thông báo riêng lẻ phải được đặt trong một kênh cụ thể.
  • Người dùng hiện có thể tắt thông báo theo kênh thay vì tắt tất cả các thông báo của một ứng dụng.
  • Các ứng dụng có thông báo đang hoạt động sẽ 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/trình chạy.
  • Người dùng hiện có thể 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.
  • Bạn cũng có thể đặt màu nền của thông báo.
  • Đã chuyển một số API liên quan đến cách hoạt động của 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.