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

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

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

  • الشبكات التي تتيح التجوال/التي لا تتيح التجوال
  • بريد صوتي مرئي
  • إعدادات شبكة الرسائل القصيرة/رسائل الوسائط المتعددة
  • إعدادات VoLTE/IMS

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

تتمثل الفوائد الرئيسية لهذا المنهج في ما يلي:

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

آلية العمل

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

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

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

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

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

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

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

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

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

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

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

  • MCC
  • MNC
  • SPN
  • رقم التعريف الدولي للمشترك في خدمات الجوّال (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 آليًا من تطبيق مشغّل شبكة الجوّال (على سبيل المثال، أثناء فعالية شريحة SIM)، استخدِم ContentResolver واجهات برمجة التطبيقات لإضافة عناصر نقاط اتصال APN إلى مقدّم محتوى يتم تحديده من خلال عنوان URL android.provider.Telephony.Carriers.CONTENT_URI. لمزيد من المعلومات عن بنية جدول عنوان URL للمحتوى، يُرجى الاطّلاع على Telephony.Carriers.

لمزيد من المعلومات، يُرجى الاطّلاع على APN وCarrierConfig.

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

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

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

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

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

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

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

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

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

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

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

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

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

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