تهيئة مشغل شبكة الجوال

يتضمّن الإصدار 6.0 من نظام التشغيل Android والإصدارات الأحدث منه إمكانية تتيح للتطبيقات التي لديها امتيازات توفير إعدادات خاصة بمشغّل شبكة الجوّال للنظام الأساسي. تستند هذه الوظيفة إلى امتيازات مشغّل شبكة الجوّال في شريحة UICC التي تم طرحها في الإصدار 5.1 من نظام التشغيل Android (Lollipop MR1)، وتسمح بنقل إعدادات مشغّل شبكة الجوّال من طبقات الإعدادات الثابتة، وتمنح مشغّلي شبكات الجوّال والمصنّعين الأصليين للأجهزة إمكانية توفير إعدادات مشغّل شبكة الجوّال للنظام الأساسي بشكل ديناميكي من خلال واجهة محدّدة.

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

  • الشبكات أثناء التجوال وخارجه
  • تحويل البريد الصوتي إلى نص
  • إعدادات شبكة الرسائل القصيرة SMS/رسائل الوسائط المتعددة
  • إعدادات VoLTE/IMS

يعود تحديد القيم التي سيتم عرضها بالكامل إلى تطبيق مشغّل شبكة الجوّال، ويمكن أن يكون ديناميكيًا استنادًا إلى المعلومات التفصيلية التي يتم تمريرها إلى التطبيق من خلال النظام الأساسي.

في ما يلي المزايا الرئيسية لهذا النهج:

  • الإعدادات الديناميكية : تتيح هذه الميزة استخدام مفاهيم مثل الإعدادات غير المستندة إلى رمز البلد ورمز شبكة الجوّال (MCCMNC)، على سبيل المثال، مشغّلو شبكات الجوّال الوهمية (MVNO) أو موافقة العملاء على خدمات إضافية.
  • التوافق مع الأجهزة التي يتم بيعها من خلال أي قناة : على سبيل المثال، يمكن إعداد هاتف يتم بيعه في السوق المفتوحة تلقائيًا باستخدام الإعدادات الصحيحة من خلال تنزيل تطبيق من متجر تطبيقات.
  • الأمان : لا يتم منح امتياز توفير هذه الإعدادات إلا للتطبيقات التي وقّعها مشغّل شبكة الجوّال.
  • واجهة برمجة تطبيقات محدّدة : في السابق، كان يتم تخزين هذه الإعدادات في الغالب في طبقات XML الداخلية ضمن الإطار، وليس من خلال واجهة برمجة تطبيقات عامة. تتوفّر واجهة برمجة تطبيقات إعدادات مشغّل شبكة الجوّال في الإصدار 6.0 من نظام التشغيل Android بشكل عام وهي محدّدة جيدًا.

آلية العمل

تحميل الإعدادات

تتضمّن إعدادات مشغّل شبكة الجوّال التي توفّرها هذه الميزة مجموعة من أزواج المفاتيح والقيم التي تغيّر سلوكيات مختلفة متعلقة بالهاتف في النظام الأساسي.

يتم تحديد مجموعة القيم لجهاز معيّن من خلال طلب البيانات من المكوّنات التالية بالترتيب:

  1. تطبيق مشغّل شبكة الجوّال (هذا الخيار اختياري، ولكنّه الموقع المقترَح للإعدادات الإضافية بخلاف ما هو متوفّر في مشروع Android مفتوح المصدر (AOSP))
  2. تطبيق إعدادات النظام الأساسي المضمّن في صورة النظام
  3. القيم التلقائية المبرمَجة في الإطار (ما يعادل السلوك قبل الإصدار 6.0 من نظام التشغيل Android)

تطبيق إعدادات النظام الأساسي

يتم تضمين تطبيق عام لإعدادات النظام الأساسي في صورة النظام. يمكن لهذا التطبيق توفير قيم لأي متغيّرات لا يوفّرها تطبيق مشغّل شبكة الجوّال العادي. يمكن العثور على تطبيق إعدادات النظام الأساسي (في الإصدار 6.0 من نظام التشغيل Android) في: packages/apps/CarrierConfig

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

كيف يتم منح امتيازات لتطبيق مشغّل شبكة الجوّال؟

يجب توقيع تطبيق مشغّل شبكة الجوّال المعني باستخدام الشهادة نفسها الموجودة على شريحة SIM، كما هو موضّح في مقالة امتيازات مشغّل شبكة الجوّال في شريحة UICC.

ما هي المعلومات التي يتم تمريرها إلى تطبيق مشغّل شبكة الجوّال؟

يتم تزويد تطبيق مشغّل شبكة الجوّال بالقيم التالية، ما يتيح له اتخاذ قرار ديناميكي بشأن القيم التي سيتم عرضها:

  • رمز البلد
  • رمز شبكة الجوّال
  • اسم مشغّل شبكة الجوّال
  • رقم التعريف الدولي للمشترك في خدمات الجوّال (IMSI)
  • GID1
  • GID2
  • رقم تعريف مشغّل شبكة الجوّال

لمزيد من المعلومات عن دمج أرقام تعريف مشغّلي شبكات الجوّال، يُرجى الاطّلاع على مقالة دمج أرقام تعريف مشغّلي شبكات الجوّال مع CarrierConfig.

متى يتم تحميل إعدادات مشغّل شبكة الجوّال؟

يتم إنشاء قائمة بأزواج المفاتيح والقيم في الحالات التالية:

  • عند تحميل شريحة SIM (أثناء التشغيل أو التبديل السريع لشريحة SIM)
  • عندما يطلب تطبيق مشغّل شبكة الجوّال إعادة التحميل يدويًا
  • عندما يتم تعديل تطبيق مشغّل شبكة الجوّال

لمزيد من التفاصيل، يُرجى الاطّلاع على android.service.carrier.CarrierService#onLoadConfig() مرجع.

استخدام الإعدادات

عند إنشاء الإعدادات، يتم استخدام القيم الواردة فيها لضبط قيم مختلفة لإعدادات النظام، بما في ذلك:

  • إعدادات الهاتف الداخلية للإطار
  • قيم الإعدادات التي تعرضها حزمة تطوير البرامج (SDK)، مثلاً في SmsManager
  • إعدادات التطبيق، مثل قيم اتصال البريد الصوتي المرئي في تطبيق "الهاتف"

مفاتيح الإعدادات

يتم تحديد قائمة المفاتيح كجزء من حزمة تطوير البرامج (SDK) العامة في android.telephony.CarrierConfigManager ولا يمكن تغييرها ضمن مستوى واجهة برمجة التطبيقات نفسه. يُرجى الاطّلاع على الجدول أدناه للحصول على ملخّص للمفاتيح.

إنشاء التطبيق

إنشاء التطبيق

يجب أن يستهدف تطبيقك مستوى واجهة برمجة التطبيقات 23 من نظام التشغيل Android (الإصدار 6.0).

التعريف بفئة تلغي android.service.carrier.CarrierService

  1. ألغِ onLoadConfig لعرض القيم التي تريد توفيرها استنادًا إلى عنصر service.carrier.CarrierIdentifier الذي تم تمريره.
  2. أضِف منطقًا لاستدعاء notifyConfigChangedForSubId في السيناريوهات التي قد تتغيّر فيها إعدادات مشغّل شبكة الجوّال بمرور الوقت (على سبيل المثال، عندما يضيف المستخدم خدمات إضافية إلى حسابه).

في ما يلي مثال:

public class SampleCarrierConfigService extends CarrierService {

    private static final String TAG = "SampleCarrierConfigService";

    public SampleCarrierConfigService() {
        Log.d(TAG, "Service created");
    }

    @Override
    public PersistableBundle onLoadConfig(CarrierIdentifier id) {
        Log.d(TAG, "Config being fetched");
        PersistableBundle config = new PersistableBundle();
        config.putBoolean(
            CarrierConfigManager.KEY_CARRIER_VOLTE_AVAILABLE_BOOL, true);
        config.putBoolean(
            CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL, false);
        config.putInt(CarrierConfigManager.KEY_VOLTE_REPLACEMENT_RAT_INT, 6);
        // Check CarrierIdentifier and add more config if needed
        return config;
    }
}

لمزيد من التفاصيل، يُرجى الاطّلاع على android.service.carrier.CarrierService مرجع.

تسمية الفئة في ملف البيان

في ما يلي مثال:

<service android:name=".SampleCarrierConfigService"
android:label="@string/service_name"
android:permission="android.permission.BIND_CARRIER_SERVICES">
      <intent-filter>
      <action android:name="android.service.carrier.CarrierService"/></intent-filter>
</service>

توقيع التطبيق باستخدام الشهادة نفسها على شريحة SIM

يُرجى الاطّلاع على متطلبات امتيازات مشغّل شبكة الجوّال في شريحة UICC.

إضافة أسماء نقاط الوصول (APN) باستخدام تطبيق مشغّل شبكة الجوّال

لإضافة أسماء نقاط الوصول (APN) آليًا من تطبيق مشغّل شبكة الجوّال (على سبيل المثال، أثناء تفعيل شريحة SIM) ، استخدِم ContentResolver واجهات برمجة التطبيقات لإضافة عناصر اسم نقطة الوصول (APN) إلى موفّر محتوى تم تحديده من خلال معرّف الموارد المنتظم (URI) android.provider.Telephony.Carriers.CONTENT_URI. لمزيد من المعلومات عن بنية الجدول لمعرّف الموارد المنتظم (URI) للمحتوى، يُرجى الاطّلاع على Telephony.Carriers.

لمزيد من المعلومات، يُرجى الاطّلاع على مقالة اسم نقطة الوصول (APN) وCarrierConfig.

اختبار التطبيق

بعد إنشاء تطبيق الإعدادات، يمكنك اختبار الرمز البرمجي باستخدام:

  • شريحة SIM تحتوي على توقيع شهادة صالح
  • جهاز يعمل بالإصدار 6.0 من نظام التشغيل Android والإصدارات الأحدث، مثلاً جهاز Android

ضبط إمكانات خدمة مشغّل شبكة الجوّال

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

إمكانات الخدمة على مستوى الجهاز

يتم ضبط إمكانات الخدمة على مستوى الجهاز عند تصنيع الجهاز (لا يمكن تغييرها بعد التصنيع). يمكن لمشغّلي شبكات الجوّال تحديد الإمكانات على مستوى الجهاز من خلال عمليات إلغاء موارد النظام التالية:

يمكن للتطبيقات طلب إمكانات الخدمة على مستوى الجهاز من خلال واجهات برمجة التطبيقات التالية:

إمكانات الخدمة على مستوى الاشتراك

بالنسبة إلى الأجهزة التي تعمل بالإصدار 15 من نظام التشغيل Android أو الإصدارات الأحدث، يمكن لمشغّلي شبكات الجوّال تحديد إمكانات الخدمة للجهاز على مستوى الاشتراك. لتحديد إمكانات الخدمة على مستوى الاشتراك، استخدِم واجهة برمجة التطبيقات CarrierConfigManager.KEY_CELLULAR_SERVICE_CAPABILITIES_INT_ARRAY. على سبيل المثال، لتحديد أنّ الاشتراك مخصّص للبيانات فقط، اضبط القيمة على SubscriptionManager#SERVICE_CAPABILITY_DATA.

يمكن للتطبيقات (تطبيقات النظام المحمّلة مسبقًا والتطبيقات الخارجية) طلب إمكانات خدمة مشغّل شبكة الجوّال لاشتراك معيّن من خلال طريقة SubscriptionInfo.getServiceCapabilities(). يتيح ذلك لمطوّري التطبيقات تخصيص تجربة المستخدم للتطبيقات استنادًا إلى الإمكانات المتاحة للاشتراك. على سبيل المثال، يمكن لمطوّري التطبيقات التأكّد من أنّ تطبيق "الهاتف" لا يسمح بإجراء المكالمات إذا كان المستخدم مشتركًا في خدمة البيانات فقط.

واجهات برمجة التطبيقات المتوقفة لإمكانات الخدمة

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

متوقفة (الإصدار 14 من نظام التشغيل Android أو الإصدارات الأقدم) مكافئة (الإصدار 15 من نظام التشغيل Android أو الإصدارات الأحدث)
TelephonyManager.isVoiceCapable() TelephonyManager.isDeviceVoiceCapable()
TelephonyManager.isSmsCapable() TelephonyManager.isDeviceSmsCapable()