برای دستگاههایی که اندروید ۱۵ یا بالاتر را اجرا میکنند، میتوانید با استفاده از API سیستم DomainSelectionService ، انتخاب دامنه بین سرویس IMS و سرویسهای قدیمی را از طریق شبکههای سوئیچینگ مداری پیادهسازی کنید. DomainSelectionService یک رابط کاربری خوشتعریف بین پلتفرم اندروید و پیادهسازی انتخاب دامنه ارائه شده توسط فروشنده است. این رابط به پیادهسازی فروشنده اجازه میدهد تا اطلاعات سیگنالینگ، مانند دامنهای که تماسها و پیامکهای خروجی در آن قرار میگیرند و اولویت نوع شبکه در اسکن شبکه را به پلتفرم ارائه دهد.

شکل ۱. نمودار معماری برای ویژگی انتخاب دامنه
مثالها و منابع
اندروید یک پیادهسازی مرجع برای ویژگی انتخاب دامنه در پروژه متنباز اندروید (AOSP) در TelephonyDomainSelectionService ارائه میدهد. برای مستندات دقیقتر در مورد API DomainSelectionService ، به 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 متصل شود، پیکربندی زیر را به پوشش دستگاه اضافه کنید:
-
config_domain_selection_service_component_name: نام کامپوننت (رشتهیComponentNameمسطحشده) برای سرویسDomainSelectionService.
از آنجا که اندروید از برنامههایی با پیادهسازیهای قابل دانلود شخص ثالث DomainSelectionService پشتیبانی نمیکند، برنامه انتخاب دامنه باید یک برنامه سیستمی باشد که در پوشه /system_ext/priv-app/ یا /product/priv-app/ قرار دارد. این چارچوب بررسی میکند که آیا نام بسته پیادهسازی با مقدار overlay دستگاه مطابقت دارد یا خیر تا تأیید کند که فقط برنامههای از پیش نصب شده و قابل اعتماد متصل شدهاند.
پشتیبانی از رابطهای رادیویی 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 پاسخ میدهد، تستهای Compatibility Test Suite (CTS) را در DomainSelectionServiceTestOnMockModem اجرا کنید.