يتضمّن الإصدار 6.0 من نظام التشغيل Android والإصدارات الأحدث إمكانية منح التطبيقات المميّزة إمكانية ضبط الإعدادات الخاصة بمشغّل شبكة الجوّال على النظام الأساسي. تستند هذه الميزة إلى امتيازات مشغّل شبكة الجوّال في شريحة UICC التي تم تقديمها في الإصدار 5.1 من نظام التشغيل Android (Lollipop MR1)، وتتيح نقل إعدادات مشغّل شبكة الجوّال بعيدًا عن الإعدادات الثابتة التي تظهر على سطح الشاشة، كما تمنح مشغّلي شبكة الجوّال والمصنّعين الأصليين للأجهزة إمكانية توفير إعدادات مشغّل شبكة الجوّال ديناميكيًا لنظام التشغيل من خلال واجهة محدّدة.
يمكن تحميل تطبيق مشفَّر بشكل صحيح خاص بمشغّل شبكة الجوّال مُسبَقًا في صورة النظام، أو تثبيته تلقائيًا، أو تثبيته يدويًا من خلال متجر تطبيقات. تُجري المنصة طلبات بحث في التطبيق لتوفير إعدادات الضبط ، بما في ذلك:
- الشبكات التي تتيح التجوال/التي لا تتيح التجوال
- بريد صوتي مرئي
- إعدادات شبكة الرسائل القصيرة/رسائل الوسائط المتعددة
- إعدادات VoLTE/IMS
يرجع تحديد القيم التي يتم عرضها بالكامل إلى تطبيق مشغّل شبكة الجوّال، ويمكن أن تكون ديناميكية استنادًا إلى المعلومات التفصيلية التي يتم تمريرها إلى التطبيق من خلال منصته.
في ما يلي المزايا الرئيسية لهذا النهج:
- الإعداد الديناميكي: يتيح هذا الإعداد استخدام مفاهيم مثل الإعدادات المستندة إلى غير "الشبكة المتكاملة للاتصالات الجوّالة"، على سبيل المثال، مشغّلو الشبكات الافتراضية الجوّالة (MVNO) أو موافقة العميل على خدمات إضافية.
- التوافق مع الأجهزة التي يتم بيعها من خلال أي قناة: على سبيل المثال، يمكن ضبط هاتف السوق المفتوح تلقائيًا باستخدام الإعدادات المناسبة من خلال تنزيل تطبيق من متجر تطبيقات.
- الأمان: لا يُمنح امتياز توفير هذا الإعداد إلا للتطبيقات التي وقّعها مشغّل شبكة الجوّال.
- واجهة برمجة التطبيقات المحدّدة: في السابق، كان يتم تخزين هذه الإعدادات في الغالب في طبقات XML الداخلية ضمن إطار العمل وليس من خلال واجهة برمجة التطبيقات العامة. واجهة برمجة التطبيقات Carrier config API في Android 6.0 علنية ومحدّدة جيدًا.
آلية العمل
تحميل الإعدادات
إنّ إعدادات مشغّل شبكة الجوّال التي تقدّمها هذه الميزة هي مجموعة من أزواج المفاتيح والقِيم التي تغيّر السلوكيات المختلفة المرتبطة بخدمات الهاتف في المنصة.
يتم تحديد مجموعة القيم لجهاز معيّن من خلال طلب المكونات التالية بالترتيب:
- تطبيق مشغّل شبكة الجوّال (هذه الخطوة اختيارية، ولكنها الموقع المُقترَح لإجراء إعدادات إضافية غير تلك المتوفّرة في "مشروع 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
- إعدادات التطبيق، مثل قيم الاتصال بميزة "الاتصال الصوتي في الفيديو" في تطبيق "المخطّط الآلي للاتصال"
مفاتيح الضبط
يتم تحديد قائمة المفاتيح كجزء من حزمة تطوير البرامج (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 آليًا من تطبيق مشغّل شبكة الجوّال (على سبيل المثال، أثناء activation)
، استخدِم
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:
متوقفة نهائيًا (Android 14 أو الإصدارات الأقدم) | الإصدار المكافئ (Android 15 أو إصدار أحدث) |
---|---|
TelephonyManager.isVoiceCapable() |
TelephonyManager.isDeviceVoiceCapable() |
TelephonyManager.isSmsCapable() |
TelephonyManager.isDeviceSmsCapable() |