Hỗ trợ ứng dụng gọi điện của bên thứ ba

Android 9 cung cấp các API để hỗ trợ tốt hơn cho các ứng dụng gọi của bên thứ ba. Các ứng dụng gọi của bên thứ ba thường dựa vào các API Điện thoại (chẳng hạn như việc truyền tin PHONE_STATE) để cùng tồn tại cùng với các lệnh gọi điện thoại của nhà mạng. Do đó, các ứng dụng gọi của bên thứ ba phải ưu tiên cuộc gọi của nhà mạng và thường phải từ chối cuộc gọi đến trong ứng dụng hoặc chấm dứt cuộc gọi đang diễn ra để nhường chỗ cho cuộc gọi của nhà mạng.

Các API trong Android 9 hỗ trợ các trường hợp gọi đồng thời giữa ứng dụng của bên thứ ba và cuộc gọi của nhà mạng. Điều này giúp bạn có thể nhận được cuộc gọi đến của bên thứ ba trong khi thực hiện cuộc gọi của nhà mạng. Khung này chịu trách nhiệm đảm bảo cuộc gọi của nhà mạng được giữ khi người dùng tham gia cuộc gọi của bên thứ ba.

Trong Android 9, các ứng dụng gọi của bên thứ ba nên triển khai API ConnectionService tự quản lý. Để biết thêm thông tin về cách tạo ứng dụng gọi điện bằng API này, hãy xem phần Tạo ứng dụng gọi điện.

API ConnectionService tự quản lý cũng cho phép nhà phát triển chọn ghi lại các cuộc gọi trong ứng dụng của họ trong nhật ký cuộc gọi hệ thống (xem EXTRA_LOG_SELF_MANAGED_CALLS). Theo các yêu cầu trong Tài liệu định nghĩa về khả năng tương thích của Android (CDD) (mục 7.4.1.2), bạn phải đảm bảo ứng dụng điện thoại hoặc trình quay số hiển thị các mục nhật ký cuộc gọi này và hiển thị tên của ứng dụng gọi bên thứ ba nơi cuộc gọi bắt nguồn (để biết ví dụ về cách ứng dụng trình quay số AOSP đáp ứng yêu cầu này, hãy xem Mục nhật ký cuộc gọi từ ứng dụng gọi của bên thứ ba).

Các ứng dụng chịu trách nhiệm đặt CAPABILITY_SUPPORT_HOLDCAPABILITY_HOLD trên kết nối của ứng dụng. Tuy nhiên, có thể một ứng dụng không thể giữ lệnh gọi trong một số trường hợp. Khung này bao gồm các quy định để giải quyết những loại trường hợp này.

Tình huống

Bạn nên sửa đổi ứng dụng quay số để xử lý các trường hợp sau.

Xử lý cuộc gọi đến ngắt kết nối một cuộc gọi đang diễn ra

Trong trường hợp có cuộc gọi đang diễn ra của bên thứ ba (ví dụ: trong cuộc gọi SuperCaller) không hỗ trợ tính năng giữ và người dùng nhận được cuộc gọi trên mạng di động (ví dụ: sử dụng nhà mạng FooCom), ứng dụng Điện thoại hoặc Trình quay số của bạn phải cho người dùng biết rằng việc trả lời cuộc gọi trên mạng di động sẽ kết thúc cuộc gọi đang diễn ra của bên thứ ba.

Trải nghiệm người dùng này rất quan trọng vì ứng dụng gọi của bên thứ ba có thể có một cuộc gọi đang diễn ra mà khung không thể giữ lại. Khi bạn trả lời một cuộc gọi mới trên thiết bị di động, cuộc gọi đang diễn ra của bên thứ ba sẽ bị ngắt kết nối.

Hãy xem giao diện người dùng trong hình để biết ví dụ:

Cuộc gọi đến ngắt kết nối một cuộc gọi đang diễn ra của bên thứ ba

Hình 1. Cuộc gọi đến ngắt kết nối cuộc gọi đang diễn ra của bên thứ ba.

Ứng dụng quay số có thể kiểm tra xem một cuộc gọi đến có khiến một cuộc gọi khác bị ngắt kết nối hay không bằng cách kiểm tra thông tin bổ sung về cuộc gọi. Đảm bảo rằng bạn đặt EXTRA_ANSWERING_DROPS_FG_CALL thành TRUEEXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME thành tên của ứng dụng có cuộc gọi bị ngắt kết nối khi bạn trả lời cuộc gọi đến trên thiết bị di động.

Mục nhập nhật ký cuộc gọi từ các ứng dụng gọi điện của bên thứ ba

Nhà phát triển ứng dụng gọi điện bên thứ ba có thể chọn ghi lại các cuộc gọi trong ứng dụng của họ vào nhật ký cuộc gọi hệ thống (xem EXTRA_LOG_SELF_MANAGED_CALLS). Điều này có nghĩa là có thể có các mục trong nhật ký cuộc gọi không phải là cuộc gọi qua mạng di động.

Khi ứng dụng trình quay số AOSP hiển thị các mục nhập nhật ký cuộc gọi liên quan đến ứng dụng gọi của bên thứ ba, tên của ứng dụng nơi diễn ra cuộc gọi sẽ hiển thị trong nhật ký cuộc gọi, như minh hoạ trong hình:

Mục nhập nhật ký cuộc gọi bằng ứng dụng gọi điện của bên thứ ba

Hình 2. Mục nhập nhật ký cuộc gọi có tên ứng dụng gọi của bên thứ ba trên ứng dụng quay số.

Để xác định tên của một ứng dụng liên kết với mục nhập nhật ký lệnh gọi, hãy sử dụng cột PHONE_ACCOUNT_COMPONENT_NAMEPHONE_ACCOUNT_ID trong trình cung cấp nhật ký lệnh gọi để tạo một thực thể của PhoneAccountHandle, giúp xác định nguồn của mục nhập nhật ký lệnh gọi. Truy vấn TelecomManager để lấy thông tin chi tiết về PhoneAccount.
Để xác định xem một mục nhập nhật ký cuộc gọi có phải là của ứng dụng gọi bên thứ ba hay không, hãy kiểm tra các tính năng PhoneAccount để xem liệu CAPABILITY_SELF_MANAGED có được đặt hay không.

Phương thức getLabel của PhoneAccount được trả về sẽ trả về tên của ứng dụng được liên kết với mục nhập nhật ký lệnh gọi từ ứng dụng gọi của bên thứ ba.

Xác nhận kết quả

Để kiểm tra xem thiết bị của bạn có hỗ trợ các ứng dụng gọi của bên thứ ba hay không, hãy sử dụng ứng dụng kiểm thử Telecomm. Ứng dụng này triển khai API ConnectionService tự quản lý. Ứng dụng nằm trong /packages/services/Telecomm/testapps/.

  1. Tạo ứng dụng kiểm thử từ thư mục gốc của kho lưu trữ nguồn Android bằng cách sử dụng:

    mmma packages/services/Telecomm/testapps/

  2. Cài đặt tệp APK bản dựng bằng adb install -g -r <apk path>. Sau đó, biểu tượng Mẫu tự quản lý sẽ được thêm vào trình chạy.

  3. Nhấn vào biểu tượng để mở ứng dụng kiểm thử.

Xử lý cuộc gọi đến ngắt kết nối một cuộc gọi đang diễn ra

Làm theo các bước sau để xác minh rằng cuộc gọi đến ngắt kết nối cuộc gọi đang diễn ra của bên thứ ba.

Ứng dụng thử nghiệm cho ứng dụng gọi điện của bên thứ ba

Hình 3. Kiểm thử ứng dụng bằng các cách triển khai mẫu của API ConnectionService.

  1. Xoá tuỳ chọn Có thể giữ.
  2. Nhấn vào ĐI để bắt đầu một cuộc gọi đi mẫu mới.
  3. Nhấn vào nút ACTIVE (ĐANG CHẠY) để kích hoạt cuộc gọi.
  4. Gọi đến số điện thoại của thiết bị đang được kiểm thử bằng một điện thoại khác. Thao tác này gọi trường hợp trình quay số được cung cấp tên của một ứng dụng và lệnh gọi của ứng dụng đó sẽ bị ngắt kết nối.
  5. Khi bạn hoàn tất, hãy nhấn vào nút DISCONNECT (NGẮT KẾT NỐI) trong ứng dụng kiểm thử.

Mục nhập nhật ký cuộc gọi từ các ứng dụng gọi điện của bên thứ ba

Sau khi hoàn thành các bước trên, ứng dụng kiểm thử phải ghi lại một lệnh gọi vào nhật ký lệnh gọi của hệ thống. Để xác nhận thiết bị ghi lại các cuộc gọi từ ứng dụng gọi điện của bên thứ ba, hãy mở ứng dụng quay số và xác nhận cuộc gọi xuất hiện trong nhật ký cuộc gọi của hệ thống.