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_HOLD
和CAPABILITY_HOLD
。但是,在某些情況下,應用程式可能無法保持通話。該框架包括解決此類案件的規定。
應用場景
您應該修改您的撥號器應用程式以處理以下場景。
處理斷開正在進行的通話的來電
在存在不支援保持的正在進行的 3P 呼叫(例如在 SuperCaller 呼叫中)並且用戶收到行動呼叫(例如透過其運營商 FooCom)的情況下,您的撥號器/電話應用程式應向使用者指示正在接聽行動網路呼叫將結束正在進行的3P 呼叫。
這種使用者體驗很重要,因為 3P 呼叫應用程式可能有框架無法保留的正在進行的通話。接聽新的行動通話會導致正在進行的 3P 通話中斷。
請參閱下面的使用者介面範例:
您的撥號器應用程式可以透過檢查通話附加功能來檢查來電是否會導致另一個通話被中斷。確保EXTRA_ANSWERING_DROPS_FG_CALL
設定為TRUE
,並將EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME
設定為在接聽來電時中斷通話的應用程式的名稱。
來自 3P 呼叫應用程式的呼叫日誌條目
3P 呼叫應用程式的開發人員可以選擇將其應用程式中的呼叫記錄在系統呼叫日誌中(請參閱EXTRA_LOG_SELF_MANAGED_CALLS
)。這意味著呼叫日誌中可能存在與行動網路呼叫無關的條目。
當 AOSP 撥號器應用程式顯示與 3P 呼叫應用程式相關的通話記錄條目時,通話記錄中會顯示發生通話的應用程式的名稱,如下圖所示:
若要確定與呼叫日誌條目關聯的應用程式的名稱,請使用呼叫日誌提供者中的PHONE_ACCOUNT_COMPONENT_NAME
和PHONE_ACCOUNT_ID
列來建立PhoneAccountHandle
的實例,該實例標識呼叫日誌條目的來源。查詢TelecomManager
以取得 PhoneAccount 的詳細資訊。
若要確定呼叫日誌條目是否來自 3P 呼叫應用程序,請檢查PhoneAccount
功能以查看是否設定了CAPABILITY_SELF_MANAGED
。
傳回的PhoneAccount
的getLabel
方法傳回與 3P 呼叫應用程式中的呼叫日誌條目關聯的應用程式名稱。
驗證
要測試您的裝置是否支援 3P 呼叫應用程序,請使用 Telecomm 測試應用程序,該應用程式實作自我管理的 ConnectionService API。該應用程式位於/packages/services/Telecomm/testapps/
。
使用以下命令從 Android 來源儲存庫的根目錄建立測試應用程式:
mmma packages/services/Telecomm/testapps/
使用
adb install -g -r <apk path>
安裝建置 apk。然後,「自我管理範例」圖示將會新增到您的啟動器中。點擊圖示以開啟測試應用程式。
處理斷開正在進行的通話的來電
請依照下列步驟驗證來電是否會中斷正在進行的 3P 通話。
- 取消選取可保持選項。
- 點擊撥出以開始新的撥出呼叫範例。
- 點選「活動」按鈕即可啟動通話。
- 用另一部手機撥打被測設備的電話號碼。這會呼叫這樣的場景:向您的撥號器提供應用程式的名稱,該應用程式將斷開其呼叫。
- 完成後,點擊測試應用程式中的「斷開連線」按鈕。
來自 3P 通話應用程式的通話記錄條目
完成上述步驟後,測試應用程式應該已將呼叫記錄到系統呼叫日誌中。若要確認裝置記錄來自 3P 呼叫應用程式的呼叫,請開啟撥號器應用程式並確認該呼叫顯示在系統呼叫日誌中。