對於搭載 Android 15 以上版本的裝置,您可以使用 DomainSelectionService 系統 API,在 IMS 服務和透過電路交換網路的舊版服務之間實作網域選取功能。DomainSelectionService 是 Android 平台與供應商提供的網域選取實作項目之間的明確介面。透過這個介面,供應商實作項目可向平台提供信號資訊,例如撥出電話和傳送簡訊的網域,以及網路掃描中的網路類型偏好設定。
 
 
圖 1. 網域選取功能架構圖
範例和來源
Android 在 Android 開放原始碼計畫 (AOSP) 的 TelephonyDomainSelectionService 中,提供網域選取功能的參考實作項目。如需 DomainSelectionService API 的詳細說明文件,請參閱 DomainSelectionService 和 API 中的其他類別。
實作
如要在 Android 裝置上導入網域選取功能,請按照下列步驟操作:
- 建立網域選取應用程式。服務必須在 - AndroidManifest.xml檔案中定義。
- 在裝置疊加層中新增設定,讓平台繫結至 - DomainSelectionService實作。
- 支援網域選取功能所需的無線電硬體抽象層 (HAL) 介面。 
本節將進一步說明這些步驟。
在 AndroidManifest.xml 中新增服務項目
如要讓網域選取應用程式向架構註冊 DomainSelectionService 服務,請使用下列格式在資訊清單檔案中新增服務項目:
<service
     android:name="com.example.domainselection.DomainSelectionService"
     android:directBootAware="true"
     android:persistent="true"
     …
     android:permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE"
     …
    <intent-filter>
        <action android:name="android.telephony.DomainSelectionService"/>
    </intent-filter>
    …
</service>
AndroidManifest.xml 中的服務定義必須定義下列屬性,網域選取功能才能運作:
- directBootAware="true":允許電話服務在使用者解鎖裝置前探索及執行服務。使用者解鎖裝置前,服務無法存取裝置加密儲存空間。詳情請參閱「支援直接啟動模式」和「以檔案為基礎的加密」。
- persistent="true":讓服務持續執行,不會因系統回收記憶體而終止。只有在應用程式建構為系統應用程式時,這項屬性才有效。
- permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE":驗證只有獲准- BIND_DOMAIN_SELECTION_SERVICE權限的程序可以繫結至應用程式。這可防止惡意應用程式繫結至服務,因為只有系統應用程式可以透過架構獲准這項權限。
服務也必須指定 intent-filter 元素和 android.telephony.DomainSelectionService 動作。架構會藉此尋找 DomainSelectionService 服務。
在裝置疊加層中定義設定
如要讓平台安全地繫結至 DomainSelectionService 服務,請在裝置疊加層中新增下列設定:
- config_domain_selection_service_component_name:- DomainSelectionService服務的元件名稱 (扁平化的- ComponentName字串)。
由於 Android 不支援採用第三方可下載 DomainSelectionService 實作方式的應用程式,網域選取應用程式必須是位於 /system_ext/priv-app/ 或 /product/priv-app/ 資料夾的系統應用程式。架構會驗證實作項目的套件名稱是否與裝置疊加值相符,確保只有受信任的預先安裝應用程式會繫結。
支援無線電 HAL 介面
如要啟用網域選取功能,請支援下列必要的無線電 HAL 介面:
- 
void setEmergencyMode(int serial, EmergencyMode emcModeType); void triggerEmergencyNetworkScan(int serial, EmergencyNetworkScanTrigger request); void cancelEmergencyNetworkScan(int serial, boolean resetScan); void exitEmergencyMode(int serial);
- 
void emergencyNetworkScanResult(RadioIndicationType type, EmergencyRegResult result);
驗證
如要測試電話架構是否能正確回應 DomainSelectionService 介面,請在 DomainSelectionServiceTestOnMockModem 中執行 Compatibility Test Suite (CTS) 測試。
