خدمات انتخاب دامنه

برای دستگاه‌های دارای Android 15 یا بالاتر، می‌توانید انتخاب دامنه را بین سرویس IMS و سرویس‌های قدیمی از طریق شبکه‌های سوئیچ مدار با استفاده از API سیستم DomainSelectionService پیاده‌سازی کنید. DomainSelectionService یک رابط کاملاً تعریف شده بین پلتفرم اندروید و اجرای انتخاب دامنه توسط فروشنده است. این رابط به پیاده‌سازی فروشنده اجازه می‌دهد اطلاعات سیگنالی، مانند دامنه‌ای که تماس‌های خروجی و پیامک‌ها قرار می‌گیرند و ترجیح نوع شبکه در اسکن شبکه، به پلتفرم ارائه کند.

دامنه-انتخاب-معماری

شکل 1. نمودار معماری برای ویژگی انتخاب دامنه

مثال ها و منبع

Android یک پیاده سازی مرجع برای ویژگی انتخاب دامنه در AOSP در TelephonyDomainSelectionService ارائه می دهد. برای مستندات دقیق برای DomainSelectionService API، DomainSelectionService و کلاس های دیگر در API را ببینید.

پیاده سازی

برای پیاده سازی ویژگی انتخاب دامنه در دستگاه اندرویدی، مراحل زیر مورد نیاز است:

  1. یک برنامه انتخاب دامنه ایجاد کنید. سرویس باید در فایل AndroidManifest.xml تعریف شود.

  2. یک پیکربندی به پوشش دستگاه اضافه کنید تا اجازه دهید پلتفرم به اجرای DomainSelectionService متصل شود.

  3. از رابط های رادیویی 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 اجرا کنید.