برای دستگاههای دارای Android 15 یا بالاتر، میتوانید
انتخاب دامنه را
بین سرویس IMS و سرویسهای قدیمی در شبکههای سوئیچینگ مداری بااستفاده از
میانای برنامهسازی کاربردی سیستم DomainSelectionService پیادهسازی کنید. DomainSelectionService
میانای کاملاً تعریفشدهای بین پلاتفرم Android و پیادهسازی انتخاب دامنه ارائهشده توسط فروشنده است. این میانای کاربری به پیادهسازی فروشنده اجازه میدهد
اطلاعات نشاندهی، مثل دامنهای که تماسهای خروجی و پیامکها
در آن قرار میگیرند و اولویت نوع شبکه در اسکن شبکه، را به پلاتفرم ارائه دهد.
شکل ۱. نمودار معماری برای ویژگی انتخاب دامنه
مثالها و منبع
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: نام عنصر (رشتهComponentNameمسطحشده) برای سرویسDomainSelectionService.
ازآنجاییکه 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 پاسخ میدهد، آزمایشهای «مجموعه آزمایش سازگاری» (CTS) را در DomainSelectionServiceTestOnMockModem اجرا کنید.