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

Android 9 cung cấp API để hỗ trợ tốt hơn cho các ứng dụng gọi điện của bên thứ ba (3P). Các ứng dụng gọi điện của 3P thường dựa vào API Điện thoại chẳng hạn như chương trình phát sóng PHONE_STATE để cùng tồn tại cùng với các cuộc gọi điện thoại của nhà cung cấp dịch vụ. Do đó, các ứng dụng gọi điện của 3P phải ưu tiên các cuộc gọi của nhà mạng và thường sử dụng cách âm thầm từ chối các 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 tình huống gọi điện đồng thời giữa ứng dụng 3P và cuộc gọi của nhà mạng. Điều này giúp bạn có thể, ví dụ, nhận cuộc gọi đến 3P trong khi đang thực hiện cuộc gọi của nhà cung cấp dịch vụ. Khung này chịu trách nhiệm đảm bảo cuộc gọi của nhà cung cấp dịch vụ được giữ khi người dùng tham gia vào cuộc gọi 3P.

Trong Android 9, các ứng dụng gọi điện của 3P được khuyến khích triển khai API ConnectionService tự quản lý. Để biết thêm thông tin về cách xây dựng ứng dụng gọi điện bằng API này, hãy xem Xây dựng ứng dụng gọi điện .

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

Ứng dụng chịu trách nhiệm cài đặt CAPABILITY_SUPPORT_HOLDCAPABILITY_HOLD trên kết nối ứng dụng của mình. Tuy nhiên, có thể ứng dụng không thể thực hiện cuộc gọi trong một số trường hợp. Khuôn khổ này bao gồm các điều khoản để giải quyết các loại vụ việc này.

kịch bản

Bạn nên sửa đổi ứng dụng quay số của mình để 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 3P đang diễn ra (ví dụ: trong cuộc gọi SuperCaller) không hỗ trợ giữ và người dùng nhận được cuộc gọi di động (ví dụ: qua nhà cung cấp dịch vụ FooCom của họ), ứng dụng Trình quay số/Đ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 3P đang diễn ra.

Trải nghiệm người dùng này rất quan trọng vì ứng dụng gọi điện 3P có thể có một cuộc gọi đang diễn ra mà khung không thể giữ được. Trả lời một cuộc gọi di động mới khiến cuộc gọi 3P đang diễn ra bị ngắt kết nối.

Xem giao diện người dùng bên dưới để biết ví dụ:

Cuộc gọi đến ngắt kết nối cuộc gọi 3P đang diễn ra
Hình 1. Cuộc gọi đến ngắt kết nối cuộc gọi 3P đang diễn ra

Ứng dụng quay số của bạn có thể kiểm tra xem cuộc gọi đến có khiến cuộc gọi khác bị ngắt kết nối hay không bằng cách kiểm tra phần bổ sung 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.

Mục nhật ký cuộc gọi từ ứng dụng gọi điện 3P

Nhà phát triển ứng dụng gọi điện 3P có thể chọn tham gia để các cuộc gọi trong ứng dụng của họ được ghi 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 dành cho 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ật ký cuộc gọi liên quan đến ứng dụng gọi điện 3P, tên của ứng dụng nơi cuộc gọi diễn ra sẽ được hiển thị trong nhật ký cuộc gọi, như minh họa bên dưới:

Nhập nhật ký cuộc gọi với ứng dụng gọi điện 3P
Hình 2. Mục nhật ký cuộc gọi với tên ứng dụng gọi điện 3P 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ục nhật ký cuộc gọi, hãy sử dụng cột PHONE_ACCOUNT_COMPONENT_NAMEPHONE_ACCOUNT_ID trong nhà cung cấp nhật ký cuộc gọi để tạo phiên bản PhoneAccountHandle , xác định nguồn của mục 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ục nhập nhật ký cuộc gọi có phải từ ứng dụng gọi điện của 3P hay không, hãy kiểm tra khả năng của PhoneAccount để xem liệu CAPABILITY_SELF_MANAGED có được đặt hay không.

Phương thức getLabel của PhoneAccount được trả về trả về tên của ứng dụng được liên kết với mục nhật ký cuộc gọi từ ứng dụng gọi điện 3P.

Thẩm định

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

  1. Xây dựng ứng dụng thử nghiệm 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 apk bản dựng bằng cách sử dụ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 khởi chạy của bạn.

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

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 3P đang diễn ra.

Ứng dụng thử nghiệm cho ứng dụng gọi điện 3P
Hình 3. Ứng dụng thử nghiệm với các triển khai mẫu của API ConnectionService tự quản lý
  1. Bỏ chọn tùy chọn Holdable .
  2. Nhấn ĐANG ĐI để bắt đầu cuộc gọi đi mẫu mới.
  3. Nhấn vào nút HOẠT ĐỘNG để bắt đầu cuộc gọi.
  4. Gọi đến số điện thoại của thiết bị đang thử nghiệm bằng điện thoại khác. Điều này gọi ra 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, ứng dụng này 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 thử nghiệm.

Mục nhật ký cuộc gọi từ ứng dụng gọi điện 3P

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