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. Hãy sử dụng mẫu này để tạo thông báo 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 hành động 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à các sự kiện có mức độ ưu tiên cao, nên các thông báo này sẽ được ưu tiên hàng đầu trong ngăn 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 các hành động bắt buộc sau:
- Trả lời hoặc Từ chối đối với cuộc gọi đến.
- Kết thúc đối với cuộc gọi đang diễn ra.
- Trả lời hoặc Kết thúc đối với tính năng sàng lọc cuộc gọi.
Các hành động theo kiểu này xuất hiện dưới dạng nút, trong đó hệ thống sẽ tự động thêm các biểu tượng và văn bản thích hợp. Hệ thống 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 bài viết Thông báo.
Các hành động 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 hành động này là một 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 gọn nhẹ 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ý vòng đời của mã thông báo và đảm bảo rằng PendingIntent có thể sử dụng được ngay cả khi ứng dụng tạo mã thông báo đó không còn chạy. Khi bạn 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 đã 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 bị loại bỏ. Để làm như vậy, hãy sử dụng CallStyle thông báo 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 incoming 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.
// For demonstrative purposes only, should use a well-defined Intents. val contentIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE) val declineIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE) val hangupIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE) val answerIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE) // Create a call style notification for an incoming call. val builderForIncomingCall = NotificationCompat.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(R.drawable.ic_logo) .setStyle( NotificationCompat.CallStyle.forIncomingCall(incomingCaller, 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 cuộc gọi đang diễn ra.
// Create a call style notification for an ongoing call. val builderForOngoingCall = NotificationCompat.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(R.drawable.ic_logo) .setStyle( NotificationCompat.CallStyle.forOngoingCall(callerAtOtherEnd, hangupIntent)) .addPerson(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 cho việc sàng lọc cuộc gọi.
// Create a call style notification for screening a call. val builder = NotificationCompat.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(R.drawable.ic_logo) .setStyle( NotificationCompat.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent)) .addPerson(caller)
Cung cấp khả năng tương thích trên nhiều phiên bản Android hơn
Liên kết thông báo CallStyle trên các phiên bản API 30 trở xuống với một dịch vụ trên nền trước để chỉ định cho các thông báo đó thứ hạng cao mà chúng được cấp trong API cấp 31 trở lên. Ngoài ra, thông báo CallStyle trên phiên bản API 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 API Telecom 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 Telecom.