از 27 مارس 2025، توصیه می کنیم از android-latest-release
به جای aosp-main
برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
خدمات انتخاب دامنه
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
برای دستگاههای دارای Android 15 یا بالاتر، میتوانید انتخاب دامنه را بین سرویس IMS و سرویسهای قدیمی از طریق شبکههای سوئیچ مدار با استفاده از API سیستم DomainSelectionService
پیادهسازی کنید. DomainSelectionService
یک رابط کاملاً تعریف شده بین پلتفرم اندروید و اجرای انتخاب دامنه توسط فروشنده است. این رابط به پیادهسازی فروشنده اجازه میدهد اطلاعات سیگنالی، مانند دامنهای که تماسهای خروجی و پیامکها قرار میگیرند و ترجیح نوع شبکه در اسکن شبکه، به پلتفرم ارائه کند.

شکل 1. نمودار معماری برای ویژگی انتخاب دامنه
مثال ها و منبع
Android یک پیاده سازی مرجع برای ویژگی انتخاب دامنه در AOSP در TelephonyDomainSelectionService
ارائه می دهد. برای مستندات دقیق برای DomainSelectionService
API، DomainSelectionService
و کلاس های دیگر در API را ببینید.
پیاده سازی
برای پیاده سازی ویژگی انتخاب دامنه در دستگاه اندرویدی، مراحل زیر مورد نیاز است:
یک برنامه انتخاب دامنه ایجاد کنید. سرویس باید در فایل 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
متصل شود، پیکربندی زیر را به پوشش دستگاه اضافه کنید:
از آنجایی که 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
پاسخ می دهد، آزمایشات CTS را در DomainSelectionServiceTestOnMockModem
اجرا کنید.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","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-29 بهوقت ساعت هماهنگ جهانی."],[],[],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)."]]