支持第三方通話應用

Android 9 提供 API 以更好地支持第三方 (3P) 調用應用程序。 3P 呼叫應用程序通常依賴電話 API(例如PHONE_STATE廣播)與運營商電話呼叫共存。因此,3P 通話應用程序必須優先考慮運營商通話,並且通常會在應用程序中靜默拒絕來電,或終止正在進行的通話以便為運營商通話讓路。

Android 9 中的 API 支持 3P 應用和運營商通話之間的並發通話場景。例如,這使得在進行運營商呼叫時接收傳入的 3P 呼叫成為可能。該框架負責確保在用戶進行 3P 呼叫時保持運營商呼叫。

在 Android 9 中,鼓勵 3P 調用應用程序實現自我管理的ConnectionService API。有關如何使用此 API 構建調用應用程序的更多信息,請參閱構建調用應用程序

自我管理的ConnectionService API 還使開發人員有機會選擇將其應用程序中的調用記錄在系統調用日誌中(請參閱EXTRA_LOG_SELF_MANAGED_CALLS )。根據Android 兼容性定義文檔 (CDD) (第 7.4.1.2 節)中的要求,您應該確保您的撥號器/電話應用程序顯示這些通話記錄條目,並顯示發出呼叫的 3P 通話應用程序的名稱(例如AOSP 撥號器應用程序如何滿足此要求,請參閱來自 3P 通話應用程序的通話記錄條目)。

應用負責在其應用的連接上設置CAPABILITY_SUPPORT_HOLDCAPABILITY_HOLD 。但是,在某些情況下,應用程序可能無法保持通話。該框架包括解決這些類型案件的規定。

場景

您應該修改您的撥號器應用程序以處理以下情況。

處理斷開正在進行的通話的來電

在不支持保持的正在進行的 3P 呼叫(例如在 SuperCaller 呼叫中)並且用戶收到移動呼叫(例如通過其運營商 FooCom)的情況下,您的撥號器/電話應用程序應向用戶指示正在接聽移動網絡通話將結束正在進行的 3P 通話。

這種用戶體驗很重要,因為 3P 通話應用程序可能正在進行框架無法保持的通話。接聽新的移動呼叫會導致正在進行的 3P 呼叫斷開。

有關示例,請參見下面的用戶界面:

來電斷開正在進行的 3P 通話
圖 1.來電斷開正在進行的 3P 通話

您的撥號器應用程序可以通過檢查通話附加功能來檢查來電是否導致另一個通話斷開。確保EXTRA_ANSWERING_DROPS_FG_CALL設置為TRUE ,並將EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME設置為在接聽移動電話時斷開其呼叫的應用程序的名稱。

來自 3P 通話應用的通話記錄條目

3P 呼叫應用程序的開發人員可以選擇將其應用程序中的呼叫記錄在系統呼叫日誌中(請參閱EXTRA_LOG_SELF_MANAGED_CALLS )。這意味著通話記錄中可能有不用於移動網絡通話的條目。

當 AOSP 撥號器應用顯示與 3P 通話應用相關的通話記錄條目時,通話記錄中會顯示發生通話的應用名稱,如下圖所示:

使用 3P 通話應用程序的通話記錄條目
圖 2.撥號應用上帶有 3P 通話應用名稱的通話記錄條目

要確定與通話記錄條目關聯的應用的名稱,請使用通話記錄提供程序中的PHONE_ACCOUNT_COMPONENT_NAMEPHONE_ACCOUNT_ID列來創建PhoneAccountHandle的實例,該實例標識通話記錄條目的來源。查詢TelecomManager以獲取 PhoneAccount 的詳細信息。
要確定通話記錄條目是否來自 3P 通話應用,請檢查PhoneAccount功能以查看是否設置了CAPABILITY_SELF_MANAGED

返回的PhoneAccountgetLabel方法返回與來自 3P 呼叫應用程序的呼叫日誌條目關聯的應用程序名稱。

驗證

要測試您的設備是否支持 3P 通話應用程序,請使用實現自我管理 ConnectionService API 的 Telecomm 測試應用程序。該應用程序位於/packages/services/Telecomm/testapps/

  1. 使用以下命令從您的 Android 源代碼庫的根目錄構建測試應用程序:

    mmma packages/services/Telecomm/testapps/

  2. 使用adb install -g -r <apk path>安裝構建 apk。然後將一個自我管理的示例圖標添加到您的啟動器中。

  3. 點擊圖標打開測試應用程序。

處理斷開正在進行的通話的來電

請按照以下步驟驗證來電是否會斷開正在進行的 3P 通話。

3P通話應用的測試應用
圖 3.具有自我管理 ConnectionService API 示例實現的測試應用程序
  1. 取消選中可保留選項。
  2. 點擊撥出以開始新的撥出呼叫示例。
  3. 點擊ACTIVE按鈕以激活呼叫。
  4. 用另一部手機撥打被測設備的電話號碼。這會調用為您的撥號器提供應用程序名稱的場景,該應用程序的呼叫將被斷開。
  5. 完成後,點擊測試應用程序中的DISCONNECT按鈕。

來自 3P 通話應用的通話記錄條目

完成上述步驟後,測試應用程序應該已將調用記錄到系統調用日誌中。要確認設備記錄來自 3P 通話應用程序的通話,請打開您的撥號器應用程序並確認通話出現在系統通話記錄中。