Trên Android 12.0 (cấp độ API 31) trở lên, hệ thống cung cấp mẫu thông báo CallStyle để phân biệt thông báo cuộc gọi với các loại thông báo khác. Sử dụng mẫu này để tạo thông báo về cuộc gọi đến hoặc cuộc gọi đang diễn ra. Mẫu này hỗ trợ thông báo ở định dạng lớn, bao gồm thông tin về người gọi và các thao tác bắt buộc như trả lời hoặc từ chối cuộc gọi.
Vì cuộc gọi đến và cuộc gọi đang diễn ra là những sự kiện có mức độ ưu tiên cao, nên những thông báo này sẽ được ưu tiên hàng đầu trong bảng thông báo. Thứ hạng này cũng cho phép hệ thống chuyển tiếp các cuộc gọi được ưu tiên này đến các thiết bị khác.
Mẫu thông báo CallStyle bao gồm những hành động bắt buộc sau:
- Trả lời hoặc Từ chối cuộc gọi đến.
- Kết thúc cuộc gọi đối với các cuộc gọi đang diễn ra.
- Nhấn vào Trả lời hoặc Kết thúc cuộc gọi để sàng lọc cuộc gọi.
Các thao tác theo kiểu này xuất hiện dưới dạng nút, hệ thống sẽ tự động thêm các biểu tượng và văn bản thích hợp. Không hỗ trợ việc gắn nhãn thủ công cho các nút. Để biết thêm thông tin về các nguyên tắc thiết kế thông báo, hãy xem phần Thông báo.
Các thao tác bắt buộc được truyền dưới dạng ý định, chẳng hạn như hangupIntent và answerIntent trong các phần sau. Mỗi mã này là một mã tham chiếu đến mã thông báo do hệ thống duy trì. Mã thông báo là một đối tượng đơn giản có thể được truyền giữa các ứng dụng và quy trình khác nhau. Hệ thống chịu trách nhiệm quản lý thời gian tồn tại của mã thông báo và đảm bảo rằng PendingIntent vẫn dùng được ngay cả khi ứng dụng đã tạo mã thông báo đó không còn chạy nữa. Khi cấp cho một ứng dụng khác PendingIntent, bạn đang cấp cho ứng dụng đó quyền thực hiện thao tác được chỉ định, chẳng hạn như từ chối hoặc trả lời.
Quyền này được cấp ngay cả khi ứng dụng tạo ý định không chạy. Để biết thêm thông tin, hãy xem tài liệu tham khảo về PendingIntent.
Kể từ Android 14 (cấp độ API 34), bạn có thể định cấu hình thông báo cuộc gọi để không thể đóng. Để thực hiện việc này, hãy sử dụng thông báo CallStyle với Notification.FLAG_ONGOING_EVENT thông qua Notification.Builder#setOngoing(true).
Sau đây là ví dụ về cách sử dụng nhiều phương thức với thông báo CallStyle.
// Create a new call, setting the user as the caller.
val incomingCaller = Person.Builder()
.setName("Jane Doe")
.setImportant(true)
.build()
Cuộc gọi đến
Sử dụng phương thức forIncomingCall() để tạo thông báo kiểu cuộc gọi cho cuộc gọi đến.
// Create a call style notification for an incoming call.
val builder = Notification.Builder(context, CHANNEL_ID)
.setContentIntent(contentIntent)
.setSmallIcon(smallIcon)
.setStyle(
Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
.addPerson(incomingCaller)
Cuộc gọi đang diễn ra
Sử dụng phương thức forOngoingCall() để tạo thông báo kiểu cuộc gọi cho một cuộc gọi đang diễn ra.
// Create a call style notification for an ongoing call.
val builder = Notification.Builder(context, CHANNEL_ID)
.setContentIntent(contentIntent)
.setSmallIcon(smallIcon)
.setStyle(
Notification.CallStyle.forOngoingCall(caller, hangupIntent))
.addPerson(second_caller)
Sàng lọc cuộc gọi
Sử dụng phương thức forScreeningCall() để tạo thông báo kiểu cuộc gọi nhằm sàng lọc cuộc gọi.
// Create a call style notification for screening a call.
val builder = Notification.Builder(context, CHANNEL_ID)
.setContentIntent(contentIntent)
.setSmallIcon(smallIcon)
.setStyle(
Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
.addPerson(second_caller)
Cung cấp khả năng tương thích trên nhiều phiên bản Android
Liên kết thông báo CallStyle trên API phiên bản 30 trở xuống với một dịch vụ trên nền trước để chỉ định cho thông báo đó thứ hạng cao mà thông báo được cấp trong API cấp 31 trở lên. Ngoài ra, các thông báo CallStyle trên API phiên bản 30 trở xuống có thể đạt được thứ hạng tương tự bằng cách đánh dấu thông báo là có màu, sử dụng phương thức setColorized().
Sử dụng Telecom API với thông báo CallStyle. Để biết thêm thông tin, hãy xem bài viết Tổng quan về khung viễn thông.