يتضمّن الإصدار 6.0 من نظام التشغيل Android والإصدارات الأحدث إمكانية تتيح للتطبيقات التي تتطلّب امتيازات خاصة توفير إعدادات خاصة بمشغّل شبكة الجوّال للنظام الأساسي. تتيح هذه الوظيفة، المستندة إلى امتيازات مشغّل شبكة الجوّال في بطاقة UICC التي تم طرحها في Android 5.1 (Lollipop MR1)، نقل عملية ضبط مشغّل شبكة الجوّال من تراكبات الضبط الثابتة، كما تتيح لمشغّلي شبكات الجوّال والمصنّعين الأصليين للأجهزة إمكانية توفير عملية ضبط مشغّل شبكة الجوّال بشكل ديناميكي للنظام الأساسي من خلال واجهة محدّدة.
يمكن إما تحميل تطبيق مشغّل شبكة الجوّال الموقّع بشكل صحيح مسبقًا في صورة النظام، أو تثبيته تلقائيًا، أو تثبيته يدويًا من خلال متجر تطبيقات. تستعلم المنصة عن التطبيق لتقديم إعدادات الضبط، بما في ذلك:
- الشبكات التي تتيح التجوال وتلك التي لا تتيحه
- بريد صوتي مرئي
- إعدادات شبكة الرسائل القصيرة (SMS) ورسائل الوسائط المتعددة (MMS)
- إعدادات VoLTE/IMS
ويعود تحديد القيم التي سيتم عرضها إلى تطبيق مشغّل شبكة الجوّال، ويمكن أن يكون ديناميكيًا استنادًا إلى المعلومات التفصيلية التي يتم تمريرها إلى التطبيق من خلال النظام الأساسي.
تتمثّل المزايا الرئيسية لهذا الأسلوب في ما يلي:
- الإعدادات الديناميكية: إتاحة مفاهيم مثل الإعدادات غير المستندة إلى رمز MCCMNC، مثل مشغّلي شبكات الجوّال الافتراضية (MVNO) أو موافقة العميل على الاشتراك في خدمات إضافية
- التوافق مع الأجهزة التي يتم بيعها من خلال أي قناة: على سبيل المثال، يمكن ضبط إعدادات هاتف تم شراؤه من السوق المفتوح تلقائيًا من خلال تنزيل تطبيق من متجر تطبيقات.
- الأمان: لا يتم منح امتياز توفير هذا الإعداد إلا للتطبيقات التي وقّعتها شركة الاتصالات.
- واجهة برمجة التطبيقات المحدّدة: في السابق، كان يتم تخزين هذا الإعداد في معظم الحالات في تراكبات XML داخلية ضمن إطار العمل وليس من خلال واجهة برمجة تطبيقات عامة. إنّ واجهة برمجة التطبيقات Carrier Config في الإصدار 6.0 من نظام التشغيل Android متاحة للجميع ومحدّدة جيدًا.
آلية العمل
تحميل الإعدادات
إنّ إعدادات مشغّل شبكة الجوّال التي توفّرها هذه الميزة هي مجموعة من أزواج المفاتيح والقيم التي تغيّر سلوكيات مختلفة متعلقة بالاتصالات الهاتفية على النظام الأساسي.
يتم تحديد مجموعة القيم لجهاز معيّن من خلال طلب البحث من المكوّنات التالية بالترتيب:
- تطبيق مشغّل شبكة الجوّال (هذا الخيار اختياري، ولكنّه المكان المقترَح لإجراء إعدادات إضافية غير تلك المتوفّرة في "مشروع Android المفتوح المصدر" (AOSP))
- تطبيق إعدادات النظام الأساسي المضمّن في صورة النظام
- القيم التلقائية المضمّنة في إطار العمل (وهي تعادل السلوك قبل الإصدار 6.0 من Android)
تطبيق إعدادات النظام الأساسي
يتم تجميع تطبيق إعدادات عامة للمنصة مع صورة النظام. يمكن لهذا التطبيق توفير قيم لأي متغيرات لا يوفّرها تطبيق مشغّل شبكة الجوّال العادي. يمكن العثور على تطبيق إعدادات النظام الأساسي (في Android 6.0) في: packages/apps/CarrierConfig
الغرض من هذا التطبيق هو توفير بعض الإعدادات الخاصة بكل شبكة عندما لا يكون تطبيق مشغّل شبكة الجوّال مثبّتًا، ويجب ألا يجري مشغّلو شبكات الجوّال أو مصنّعو المعدات الأصلية سوى تغييرات بسيطة عليه في صورهم. بدلاً من ذلك، على مشغّلي شبكات الجوّال توفير تطبيق منفصل لتخصيص إعدادات مشغّل شبكة الجوّال، ما يتيح توزيع التحديثات من خلال قنوات مثل متاجر التطبيقات.
كيفية منح امتيازات لتطبيق مشغّل شبكة الجوّال
يجب توقيع تطبيق مشغّل شبكة الجوّال المعنيّ باستخدام الشهادة نفسها المتوفّرة على شريحة SIM، كما هو موضّح في امتيازات مشغّل شبكة الجوّال في بطاقة UICC.
المعلومات التي يتم تمريرها إلى تطبيق مشغل شبكة الجوّال
يتم تزويد تطبيق مشغّل شبكة الجوّال بالقيم التالية، ما يتيح له اتّخاذ قرار ديناميكي بشأن القيم التي يجب عرضها:
- MCC
- MNC
- SPN
- رقم التعريف الدولي للمشترك في خدمات الجوّال (IMSI)
- GID1
- GID2
- معرّف مشغّل شبكة الجوّال
لمزيد من المعلومات حول دمج معرّفات شركات النقل، يُرجى الاطّلاع على دمج معرّفات شركات النقل مع CarrierConfig.
عند تحميل إعدادات مشغّل شبكة الجوّال
يتم إنشاء قائمة أزواج المفاتيح والقيم في الحالات التالية:
- عند تحميل شريحة SIM (أثناء التشغيل أو التبديل السريع لشريحة SIM)
- عندما يفعّل تطبيق مشغّل شبكة الجوّال إعادة التحميل يدويًا
- عند تحديث تطبيق مشغّل شبكة الجوّال
لمزيد من التفاصيل، يُرجى الاطّلاع على مرجع
android.service.carrier.CarrierService#onLoadConfig()
.
استخدام ملف الإعداد
عند إنشاء الإعدادات، يتم استخدام القيم الواردة فيها لضبط قيم مختلفة لإعدادات النظام، بما في ذلك:
- إعدادات الاتصال الهاتفي في إطار العمل الداخلي
- قيم الإعدادات التي تعرضها حزمة تطوير البرامج (SDK)، مثل SmsManager
- إعدادات التطبيق، مثل قيم اتصال VVM في تطبيق "الهاتف"
مفاتيح الإعداد
يتم تحديد قائمة المفاتيح كجزء من حزمة تطوير البرامج (SDK) العامة في android.telephony.CarrierConfigManager
ولا يمكن تغييرها ضمن مستوى واجهة برمجة التطبيقات نفسه. اطّلِع على الجدول أدناه للحصول على ملخّص للمفاتيح.
إنشاء التطبيق
إنشاء التطبيق
يجب أن يستهدف تطبيقك المستوى 23 من واجهة برمجة التطبيقات Android 6.0.
تحديد فئة تتجاوز android.service.carrier.CarrierService
- يمكنك إلغاء
onLoadConfig
لعرض القيم التي تريد تقديمها استنادًا إلى عنصرservice.carrier.CarrierIdentifier
الذي تم تمريره. - أضِف منطقًا لاستدعاء
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
لإضافة عناصر أسماء نقاط الوصول إلى موفّر محتوى
يتم تحديده من خلال معرّف الموارد المنتظم (URI)
android.provider.Telephony.Carriers.CONTENT_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()
. يتيح ذلك لمطوّري التطبيقات تخصيص تجربة المستخدمين في التطبيقات استنادًا إلى الإمكانات المتاحة للاشتراك. على سبيل المثال، يمكن لمطوّري التطبيقات التأكّد من أنّ تطبيق الاتصال لا يسمح بإجراء المكالمات إذا كان المستخدم مشتركًا في خطة بيانات فقط.
واجهات برمجة التطبيقات المتوقّفة لقدرات الخدمة
اعتبارًا من Android 15، يوفّر نظام التشغيل إمكانات الخدمة على مستوى الجهاز وعلى مستوى الاشتراك. وبسبب هذا التغيير، تمت إعادة تسمية واجهات برمجة التطبيقات الحالية الخاصة بإمكانات الأجهزة لتسهيل قراءتها. يسرد الجدول التالي واجهات برمجة التطبيقات المتوقّفة نهائيًا وواجهات برمجة التطبيقات التي تم تغيير اسمها في Android 15:
موقوف نهائيًا (الإصدار 14 من نظام التشغيل Android أو الإصدارات الأقدم) | ما يعادله (الإصدار 15 من نظام التشغيل Android أو الإصدارات الأحدث) |
---|---|
TelephonyManager.isVoiceCapable() |
TelephonyManager.isDeviceVoiceCapable() |
TelephonyManager.isSmsCapable() |
TelephonyManager.isDeviceSmsCapable() |