支援第三方通話應用程式

Android 9 提供 API,可進一步支援第三方通話應用程式。第三方通話應用程式通常會依賴電話 API (例如 PHONE_STATE 廣播),才能與電信業者的電話通話共存。因此,第三方通話應用程式必須將優先順序給予電信業者通話,並經常在應用程式中靜默拒絕來電,或終止進行中的通話,以便讓電信業者通話順利進行。

Android 9 中的 API 支援第三方應用程式和電信業者通話之間的並行通話情境。舉例來說,這可讓您在進行電信業者通話時,接聽第三方來電。當使用者與第三方通話時,架構會負責確保電信業者通話處於保留狀態。

在 Android 9 中,我們建議第三方通話應用程式實作自行管理的 ConnectionService API。如要進一步瞭解如何使用此 API 建構通話應用程式,請參閱「建構通話應用程式」。

自管 ConnectionService API 也讓開發人員有機會選擇將應用程式中的通話記錄在系統通話記錄中記錄 (請參閱 EXTRA_LOG_SELF_MANAGED_CALLS)。根據 Android 相容性定義文件 (CDD) 中的規定 (第 7.4.1.2 節),您應確保撥號或電話應用程式會顯示這些通話記錄項目,並顯示通話來源的第三方通話應用程式名稱 (如需瞭解 AOSP 撥號應用程式如何符合這項規定,請參閱「第三方通話應用程式中的通話記錄項目」)。

應用程式負責在其連線中設定 CAPABILITY_SUPPORT_HOLDCAPABILITY_HOLD。不過,在某些情況下,應用程式可能無法保留通話。這個架構包含解決這類案件的條款。

情況

您應修改撥號應用程式,以便處理下列情境。

處理會中斷進行中通話的來電

如果有未支援保留的第三方通話 (例如 SuperCaller 通話) 正在進行,且使用者收到行動電話通話 (例如使用電信業者 FooCom),您的撥號或電話應用程式應向使用者指出,接聽行動網路通話會結束正在進行的第三方通話。

這項使用者體驗相當重要,因為第三方通話應用程式可能會有持續通話,而這類通話無法由架構保留。接聽新的行動電話來電會導致正在進行的第三方通話中斷。

請參閱下圖中的使用者介面:

來電導致正在進行的第三方通話中斷

圖 1. 來電導致正在進行的第三方通話中斷。

撥號程式應用程式可以檢查通話額外資訊,判斷是否有來電導致另一通電話中斷。請確認 EXTRA_ANSWERING_DROPS_FG_CALL 已設為 TRUE,而 EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME 已設為在接聽來電時中斷通話的應用程式名稱。

第三方通話應用程式的通話記錄項目

第三方通話應用程式的開發人員可以選擇讓應用程式中的通話記錄在系統通話記錄中 (請參閱 EXTRA_LOG_SELF_MANAGED_CALLS)。這表示通話記錄中可能會出現非行動網路通話的項目。

當 AOSP 撥號應用程式顯示與第三方通話應用程式相關的通話記錄項目時,通話記錄會顯示通話發生時所用的應用程式名稱,如圖所示:

使用第三方通話應用程式建立的通話記錄項目

圖 2. 通話記錄項目,顯示撥號應用程式中的第三方通話應用程式名稱。

如要判斷與通話記錄項目相關聯的應用程式名稱,請使用通話記錄供應器中的 PHONE_ACCOUNT_COMPONENT_NAMEPHONE_ACCOUNT_ID 欄,建立 PhoneAccountHandle 的例項,這可識別通話記錄項目的來源。查詢 TelecomManager 即可取得 PhoneAccount 的詳細資料。
如要判斷通話記錄項目是否來自第三方通話應用程式,請檢查 PhoneAccount 功能 ,看看是否已設定 CAPABILITY_SELF_MANAGED

傳回的 PhoneAccountgetLabel 方法會傳回與第三方呼叫應用程式中的通話記錄項目相關聯的應用程式名稱。

驗證

如要測試裝置是否支援第三方通話應用程式,請使用 Telecomm 測試應用程式,該應用程式會實作自行管理的 ConnectionService API。應用程式位於 /packages/services/Telecomm/testapps/ 中。

  1. 使用以下方式,從 Android 來源存放區的根目錄建構測試應用程式:

    mmma packages/services/Telecomm/testapps/

  2. 使用 adb install -g -r <apk path> 安裝建構的 APK。接著,系統會在啟動器中新增「Self-Managed Sample」圖示。

  3. 輕觸圖示即可開啟測試應用程式。

處理會中斷進行中通話的來電

請按照下列步驟操作,確認來電會中斷正在進行的第三方通話。

測試第三方通話應用程式

圖 3. 使用 ConnectionService API 的範例實作項目測試應用程式。

  1. 取消勾選「Holdable」選項。
  2. 輕觸「OUTGOING」即可開始新的外撥通話範例。
  3. 輕觸「已啟用」按鈕,將通話設為啟用狀態。
  4. 使用其他手機撥打測試裝置的電話號碼。這會觸發以下情況:撥號應用程式會提供應用程式名稱,導致通話中斷。
  5. 完成後,請在測試應用程式中輕觸「DISCONNECT」按鈕。

第三方通話應用程式的通話記錄項目

完成上述步驟後,測試應用程式應已將系統呼叫記錄記錄到系統呼叫記錄中。如要確認裝置是否記錄第三方通話應用程式的通話,請開啟撥號應用程式,確認通話是否顯示在系統通話記錄中。