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 ứng dụng gọi điện của bên thứ ba. Các ứng dụng gọi điện của bên thứ ba thường dựa vào API Điện thoại, chẳng hạn như chương trình phát PHONE_STATE để cùng tồn tại với các cuộc gọi điện thoại của nhà mạng. Do đó, các ứng dụng gọi điện của bên thứ ba phải ưu tiên các 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 một cách âm thầm hoặc kết thúc 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 tình huống gọi điện đồng thời giữa ứng dụng bên thứ ba và cuộc gọi của nhà mạng. Ví dụ: điều này giúp bạn có thể nhận cuộc gọi đến của bên thứ ba trong khi đang 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 qua nhà mạng được giữ lại 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 điện 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 bài viết 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ọ vào nhật ký cuộc gọi của 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 nên đảm bảo rằng ứng dụng quay số hoặc ứng dụng điện thoại của bạn hiển thị các mục nhật ký cuộc gọi này và cho biết tên của ứng dụng gọi điện của bên thứ ba nơi cuộc gọi bắt đầu (để biết ví dụ về cách ứng dụng quay số AOSP đáp ứng yêu cầu này, hãy xem bài viết Các mục nhật ký cuộc gọi từ ứng dụng gọi điện của bên thứ ba).

Các ứng dụng chịu trách nhiệm đặt CAPABILITY_SUPPORT_HOLDCAPABILITY_HOLD trên các kết nối của ứng dụng. Tuy nhiên, có thể một ứng dụng không giữ được cuộc gọi trong một số trường hợp. Khung này có các điều khoản để 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 tình huống sau.

Xử lý cuộc gọi đến làm ngắt kết nối 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ợ giữ cuộc gọi và người dùng nhận được cuộc gọi di động (ví dụ: sử dụng nhà mạng FooCom), ứng dụng Trình quay số hoặc Ứng dụng Điện thoại của bạn sẽ cho người dùng biết rằng việc trả lời cuộc gọi 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 điện của bên thứ ba có thể có cuộc gọi đang diễn ra mà khung này không giữ được. Việc trả lời cuộc gọi di động mới sẽ khiến cuộc gọi đang diễn ra của bên thứ ba 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 cuộc gọi đang diễn ra với bên thứ ba

Hình 1. Cuộc gọi đến làm 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 cuộc gọi đến có làm ngắt kết nối cuộc gọi khác hay không bằng cách kiểm tra các phần bổ sung của cuộc gọi. Đảm bảo rằng EXTRA_ANSWERING_DROPS_FG_CALL được đặt thành TRUEEXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME được đặt thành tên của ứng dụng có cuộc gọi bị ngắt kết nối khi trả lời cuộc gọi di động đến.

Các mục nhật ký cuộc gọi từ ứ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 của 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 của hệ thống (xem EXTRA_LOG_SELF_MANAGED_CALLS). Điều này có nghĩa là bạn có thể có các mục trong nhật ký cuộc gọi không dành cho cuộc gọi mạng di động.

Khi ứng dụng quay số AOSP hiển thị các mục nhật ký cuộc gọi liên quan đến ứng dụng gọi điện của bên thứ ba, tên của ứng dụng nơi cuộc gọi diễn ra sẽ xuất hiện 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 có ứ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 của ứng dụng gọi điện của bên thứ ba trên ứng dụng quay số.

Để xác định tên của ứng dụng được liên kết với một mục nhập nhật ký cuộc gọi, hãy sử dụng các cột PHONE_ACCOUNT_COMPONENT_NAMEPHONE_ACCOUNT_ID trong trình cung cấp nhật ký cuộc gọi để tạo một thực thể của PhoneAccountHandle, xác định nguồn của một mục nhập nhật ký cuộc gọi. Truy vấn TelecomManager để biết 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 từ ứng dụng gọi điện của bên thứ ba hay không, hãy kiểm tra PhoneAccount các chức năng để xem 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ột mục nhập nhật ký cuộc gọi từ ứng dụng gọi điện của bên thứ ba.

Xác nhận kết quả

Để kiểm thử rằng thiết bị của bạn hỗ trợ ứng dụng gọi điện của bên thứ ba, hãy sử dụng ứng dụng kiểm thử Telecomm triển khai API ConnectionService tự quản lý. Ứng dụng này 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 làm ngắt kết nối cuộc gọi đang diễn ra

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

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

Hình 3. Ứng dụng kiểm thử có 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 CUỘC GỌI ĐI để bắt đầu cuộc gọi đi mẫu mới.
  3. Nhấn vào nút ĐANG HOẠT ĐỘNG để cuộc gọi chuyển sang trạng thái đang hoạt động.
  4. Gọi số điện thoại của thiết bị đang kiểm thử bằng một điện thoại khác. Thao tác này sẽ gọi tình huống trong đó trình quay số của bạn được cung cấp tên của một ứng dụng sẽ bị ngắt kết nối cuộc gọi.
  5. Khi bạn hoàn tất, hãy nhấn vào nút NGẮT KẾT NỐI trong ứng dụng kiểm thử.

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

Sau khi hoàn tất các bước trên, ứng dụng kiểm thử sẽ ghi lại một cuộc gọi vào nhật ký cuộc gọi của hệ thống. Để xác nhận rằng 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ố rồi 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.