خدمة اختيار النطاقات

بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 15 أو الإصدارات الأحدث، يمكنك تنفيذ اختيار النطاق بين خدمة IMS والخدمات القديمة على الشبكات المستندة إلى التبديل الدائري باستخدام واجهة برمجة تطبيقات نظام DomainSelectionService. DomainSelectionService هي واجهة محدّدة بوضوح بين نظام Android الأساسي وتنفيذ اختيار النطاق الذي يقدّمه المورّد. تتيح هذه الواجهة لموفّر الخدمة تنفيذ توفير معلومات الإرسال إلى المنصة، مثل النطاق الذي يتم فيه وضع المكالمات الصادرة والرسائل القصيرة وإعدادات الشبكة المفضّلة في فحص الشبكة.

domain-selection-architecture

الشكل 1: مخطّط معماري لميزة اختيار النطاق

الأمثلة والمصدر

يقدّم Android نموذج تنفيذ مرجعيًا لميزة اختيار النطاق في AOSP على الرابط TelephonyDomainSelectionService. للحصول على مستندات تفصيلية عن واجهة برمجة تطبيقات DomainSelectionService، يُرجى الاطّلاع على DomainSelectionService والفئات الأخرى في واجهة برمجة التطبيقات.

التنفيذ

لتفعيل ميزة اختيار النطاق على جهاز 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.