سرویس انتخاب دامنه

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

نمودار معماری «سرویس انتخاب دامنه» که تعامل آن را با پلاتفرم Android و پیاده‌سازی‌های فروشنده نشان می‌دهد

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

مثال‌ها و منبع

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

پیاده‌سازی

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

  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 اجرا کنید.