اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release
بدلاً من aosp-main
لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
خدمة اختيار النطاق
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 15 أو الإصدارات الأحدث، يمكنك
تنفيذ اختيار النطاق
بين خدمة IMS والخدمات القديمة على الشبكات المستندة إلى التبديل الدائري باستخدام
واجهة برمجة تطبيقات نظام DomainSelectionService
. DomainSelectionService
هي واجهة محدّدة بوضوح بين نظام Android الأساسي وتنفيذ
اختيار النطاق الذي يقدّمه المورّد. تتيح هذه الواجهة لموفّر الخدمة تنفيذ
توفير معلومات الإرسال إلى المنصة، مثل النطاق الذي يتم فيه وضع المكالمات الصادرة والرسائل القصيرة
وإعدادات الشبكة المفضّلة في فحص الشبكة.
الشكل 1: مخطّط معماري لميزة اختيار النطاق
الأمثلة والمصدر
يقدّم Android تنفيذًا مرجعيًا لميزة اختيار النطاق في
AOSP على الرابط TelephonyDomainSelectionService
. للحصول على مستندات تفصيلية عن واجهة برمجة تطبيقات DomainSelectionService
، يُرجى الاطّلاع على DomainSelectionService
والفئات الأخرى في واجهة برمجة التطبيقات.
التنفيذ
لتفعيل ميزة اختيار النطاق على جهاز 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
، أضِف
الإعدادات التالية إلى تراكب الجهاز:
بما أنّ نظام التشغيل 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
.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","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 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],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)."]]