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 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 cuộc gọi đến hoặc thông báo cuộc gọi đang diễn ra. Mẫu hỗ trợ các thông báo định dạng lớn bao gồm thông tin 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 những thông báo này sẽ nhận được mức độ ưu tiên cao nhất 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 lệnh gọi ư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 đây:

  • Trả lời hoặc Từ chối đối với cuộc gọi đến.
  • Kết thú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 các biểu tượng và văn bản phù hợp. Không hỗ trợ việc gắn nhãn các nút theo cách thủ công. Để biết thêm thông tin về nguyên tắc thiết kế thông báo, hãy xem phần 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 thao tác bắt buộc sẽ được chuyển dưới dạng ý định, chẳng hạn như hangupIntentanswerIntent trong các phần sau. Mỗi mã này đều tham chiếu đến một 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 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ã không còn chạy nữa. Khi bạn cấp PendingIntent cho một ứng dụng khác, tức là 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 hiện không chạy. Để biết thêm thông tin, hãy xem tài liệu tham khảo cho 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 là không đóng được. Để thực hiện việc này, sử dụng thông báo CallStyle cùng với Notification.FLAG_ONGOING_EVENT đến 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 CallStlye.

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 gọi cho lệnh 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 lệnh 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 thông báo kiểu cuộc gọi nhằm 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 các 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 thứ hạng cao cho các thông báo đó trong API cấp 31 trở lên. Ngoài ra, 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à đã tô màu, sử dụng phương thức setColorized().

Sử dụng các 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.