Tạo thông báo kiểu cuộc gọi cho ứng dụng gọi điện

Trên Android 12.0 (API cấp 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 các loại thông báo khác. Sử dụng mẫu này để tạo cuộc gọi đến hoặc thông báo cuộc gọi đang diễn ra. Mẫu này hỗ trợ thông báo có định dạng lớn bao gồm thông tin người gọi và hành động cần thiết như trả lời hoặc từ chối cuộc gọi.

Vì cuộc gọi đến và đang diễn ra đều là sự kiện có mức độ ưu tiên cao nên những thông báo này nhận được mức độ ưu tiên hàng đầu trong ngăn thông báo. Thứ hạng này cũng cho phép để 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 đối với cuộc gọi đến.
  • Kết thúc để thực hiện các cuộc gọi đang diễn ra.
  • Trả lời hoặc Kết thúc để sàng lọc cuộc gọi.

Các thao tác trong kiểu này xuất hiện dưới dạng nút và hệ thống sẽ tự động thêm biểu tượng và văn bản thích hợp. Không hỗ trợ 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 Thông báo.

Thông báo theo kiểu cuộc gọi có các nút có gắn nhãn
Hình 1. Mẫu CallStyle cho cuộc gọi đến và cuộc gọi đang diễn ra.

Các hành động bắt buộc được chuyển dưới dạng ý định, chẳng hạn như hangupIntentanswerIntent trong các phần sau. Mỗi nhóm trong số này là các 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 nhẹ có thể được truyền giữa các ứng dụng và quy trình. Hệ thống này 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 vẫn dùng được ngay cả khi ứng dụng tạo ra thuộc tính này không còn dùng được nữa đang chạy. Khi bạn cấp PendingIntent cho một ứng dụng khác, bạn đang cấp 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 hiện không chạy. Để biết thêm thông tin, hãy xem tài liệu tham khảo trong PendingIntent.

Kể từ Android 14 (API cấp 34), bạn có thể định cấu hình thông báo cuộc gọi không đóng được. Để thực hiện việc này, hãy sử dụng thông báo CallStyle bằng Notification.FLAG_ONGOING_EVENT đến Notification.Builder#setOngoing(true).

Sau đây là ví dụ về cách sử dụng các phương thức khác nhau với CallStyle .

Kotlin

// Create a new call, setting the user as the caller.
val incomingCaller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

Java

// Create a new call with the user as the caller.
Person incomingCaller = new 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.

Kotlin

// 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)

Java

// Create a call style notification for an incoming call.
Notification.Builder 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 cuộc gọi đang diễn ra.

Kotlin

// 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)

Java

// Create a call style notification for an ongoing call.
Notification.Builder builder = new 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 một thông báo kiểu cuộc gọi đang sàng lọc một cuộc gọi.

Kotlin

// 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)

Java

// Create a call style notification for screening a call.
Notification.Builder builder = new 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 hơn

Liên kết thông báo CallStyle trên API phiên bản 30 trở xuống với dịch vụ trên nền trước để chỉ định thứ hạng cao cho chúng trong API cấp 31 trở lên. Ngoài ra, thông báo của CallStyle trên API phiên bản 30 hoặc thấp hơn có thể đạt được thứ hạng tương tự bằng cách đánh dấu thông báo là được tô màu bằng phương thức setColorized().

Sử dụng Telecom API (API Viễn thông) với thông báo CallStyle. Để biết thêm thông tin, hãy xem Tổng quan về khung viễn thông.