2025년 3월 27일부터 AOSP를 빌드하고 기여하려면 aosp-main
대신 android-latest-release
를 사용하는 것이 좋습니다. 자세한 내용은 AOSP 변경사항을 참고하세요.
도메인 선택 서비스
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
Android 15 이상을 실행하는 기기의 경우 DomainSelectionService
시스템 API를 사용하여 회선 스위치 네트워크를 통해 IMS 서비스와 기존 서비스 간에 도메인 선택을 구현할 수 있습니다. DomainSelectionService
는 Android 플랫폼과 공급업체 제공 도메인 선택 구현 간의 잘 정의된 인터페이스입니다. 이 인터페이스를 통해 공급업체 구현은 발신 전화 및 SMS가 배치되는 도메인, 네트워크 스캔의 네트워크 유형 환경설정과 같은 신호 정보를 플랫폼에 제공할 수 있습니다.
그림 1. 도메인 선택 기능의 아키텍처 다이어그램
예 및 소스
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
권한을 부여받은 프로세스만 앱에 바인딩할 수 있도록 합니다. 이는 프레임워크에서 시스템 앱에만 권한을 부여할 수 있으므로 허가받지 않은 앱이 서비스에 바인딩하는 것을 방지합니다.
또한 서비스는 android.telephony.DomainSelectionService
작업을 사용하여 intent-filter
요소를 지정해야 합니다. 이렇게 하면 프레임워크에서 DomainSelectionService
서비스를 찾을 수 있습니다.
기기 오버레이에서 구성 정의
플랫폼이 DomainSelectionService
서비스에 안전하게 바인딩되도록 하려면 기기 오버레이에 다음 구성을 추가합니다.
Android는 서드 파티에서 다운로드할 수 있는 DomainSelectionService
구현이 있는 앱을 지원하지 않으므로 도메인 선택 앱은 /system_ext/priv-app/
또는 /product/priv-app/
폴더에 있는 시스템 앱이어야 합니다. 프레임워크는 구현의 패키지 이름이 기기 오버레이 값과 일치하는지 확인하여 신뢰할 수 있고 사전 설치된 앱만 바인딩되도록 합니다.
라디오 HAL 인터페이스 지원
도메인 선택 기능을 사용 설정하려면 다음과 같은 필수 무선 HAL 인터페이스를 지원하세요.
IRadioNetwork
void setEmergencyMode(int serial, EmergencyMode emcModeType);
void triggerEmergencyNetworkScan(int serial,
EmergencyNetworkScanTrigger request);
void cancelEmergencyNetworkScan(int serial, boolean resetScan);
void exitEmergencyMode(int serial);
IRadioNetworkIndication
void emergencyNetworkScanResult(RadioIndicationType type,
EmergencyRegResult result);
유효성 검사
텔레포니 프레임워크가 DomainSelectionService
인터페이스에 올바르게 응답하는지 테스트하려면 DomainSelectionServiceTestOnMockModem
에서 CTS 테스트를 실행합니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-26(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-07-26(UTC)"],[],[],null,["# Domain selection service\n\nFor devices running Android 15 or higher, you can\nimplement domain selection\nbetween the IMS service and legacy services over circuit switched networks using\nthe [`DomainSelectionService`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/telephony/java/android/telephony/DomainSelectionService.java) system API. `DomainSelectionService`\nis a well-defined interface between the Android platform and a vendor provided\ndomain selection implementation. This interface lets the vendor implementation\nprovide signaling information, such as the domain that outgoing calls and SMS\nare placed and network type preference in network scanning, to the platform.\n\n**Figure 1.** Architecture diagram for the domain selection feature\n\nExamples and source\n-------------------\n\nAndroid provides a reference implementation for the domain selection feature in\nAOSP at [`TelephonyDomainSelectionService`](https://cs.android.com/android/platform/superproject/+/android-latest-release:packages/services/Telephony/src/com/android/services/telephony/domainselection/). For detailed\ndocumentation for the `DomainSelectionService` API, see\n[`DomainSelectionService`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/telephony/java/android/telephony/DomainSelectionService.java) and the other classes in the API.\n\nImplementation\n--------------\n\nTo implement the domain selection feature on an Android device, the following\nsteps are required:\n\n1. Create a domain selection app. The service must be defined in the\n `AndroidManifest.xml` file.\n\n2. Add a configuration to the device overlay to let the platform bind to the\n `DomainSelectionService` implementation.\n\n3. Support the required radio HAL interfaces for the domain selection feature.\n\nThis section provides further details of these steps.\n\n### Add service entry in AndroidManifest.xml\n\nFor your domain selection app to register the `DomainSelectionService` service\nwith the framework, add a service entry in the manifest file using the following\nformat: \n\n \u003cservice\n android:name=\"com.example.domainselection.DomainSelectionService\"\n android:directBootAware=\"true\"\n android:persistent=\"true\"\n ...\n android:permission=\"android.permission.BIND_DOMAIN_SELECTION_SERVICE\"\n ...\n \u003cintent-filter\u003e\n \u003caction android:name=\"android.telephony.DomainSelectionService\"/\u003e\n \u003c/intent-filter\u003e\n ...\n \u003c/service\u003e\n\nThe service definition in `AndroidManifest.xml` must define the following\nattributes for the domain selection feature to operate.\n\n- `directBootAware=\"true\"`: Lets the service be discovered and run by\n telephony before the user unlocks the device. The service can't access\n *device-encrypted* storage before the user unlocks the device. For more\n information,\n see [Support Direct Boot mode](https://developer.android.com/privacy-and-security/direct-boot) and [File-Based Encryption](/docs/security/features/encryption/file-based).\n\n- `persistent=\"true\"`: Lets the service be run persistently and not be\n killed by the system to reclaim memory. This attribute works *only* if the\n app is built as a system app.\n\n- `permission=\"android.permission.BIND_DOMAIN_SELECTION_SERVICE\"`: Ensures\n that only a process that has the `BIND_DOMAIN_SELECTION_SERVICE` permission\n granted to it can bind to the app. This prevents a rogue app from binding to\n the service, because only system apps can be granted the permission by the\n framework.\n\nThe service must also specify the `intent-filter` element with the\n`android.telephony.DomainSelectionService` action. This lets the framework find\nthe `DomainSelectionService` service.\n\n### Define configuration in device overlay\n\nFor the platform to securely bind to the `DomainSelectionService` service, add\nthe following configuration to the device overlay:\n\n- [`config_domain_selection_service_component_name`](https://cs.android.com/android/platform/superproject/+/android-latest-release:packages/services/Telephony/res/values/config.xml?q=config_domain_selection_service_component_name): The component name (a flattened `ComponentName` string) for the `DomainSelectionService` service\n\nBecause Android doesn't support apps with third-party downloadable\n`DomainSelectionService` implementations, the domain selection app must be a\nsystem app that resides in the `/system_ext/priv-app/` or `/product/priv-app/`\nfolder. The framework verifies whether the package name of the implementation\nmatches the device overlay value to ensure only trusted, preinstalled apps are\nbound.\n\n### Support radio HAL interfaces\n\nTo enable the domain selection feature, support the following required radio HAL\ninterfaces:\n\n- [`IRadioNetwork`](https://cs.android.com/android/platform/superproject/+/android-latest-release:hardware/interfaces/radio/aidl/android/hardware/radio/network/IRadioNetwork.aidl)\n\n void setEmergencyMode(int serial, EmergencyMode emcModeType);\n void triggerEmergencyNetworkScan(int serial,\n EmergencyNetworkScanTrigger request);\n void cancelEmergencyNetworkScan(int serial, boolean resetScan);\n void exitEmergencyMode(int serial);\n\n- [`IRadioNetworkIndication`](https://cs.android.com/android/platform/superproject/+/android-latest-release:hardware/interfaces/radio/aidl/android/hardware/radio/network/IRadioNetworkIndication.aidl)\n\n void emergencyNetworkScanResult(RadioIndicationType type,\n EmergencyRegResult result);\n\nValidation\n----------\n\nTo test that the telephony framework properly responds to the\n`DomainSelectionService` interface, run the CTS tests in\n[`DomainSelectionServiceTestOnMockModem`](https://cs.android.com/android/platform/superproject/+/android-latest-release:cts/tests/tests/telephony/current/src/android/telephony/cts/DomainSelectionServiceTestOnMockModem.java)."]]