تكوين الناقل

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

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

  • شبكات التجوال / غير المتجولة
  • البريد الصوتي المرئي
  • إعدادات شبكة SMS / MMS
  • تكوينات VoLTE / IMS

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

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

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

كيف تعمل

تحميل ملف config

تكوين الناقل الذي توفره هذه الميزة عبارة عن مجموعة من أزواج القيمة الرئيسية التي تغير السلوكيات المختلفة المتعلقة بالاتصالات الهاتفية في النظام الأساسي.

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

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

تطبيق تكوين النظام الأساسي

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

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

كيف يتم منح الامتياز لتطبيق الناقل

يجب توقيع تطبيق الناقل المعني بنفس الشهادة الموجودة على بطاقة SIM ، كما هو موثق في امتيازات UICC Carrier Privileges .

ما هي المعلومات التي يتم تمريرها إلى تطبيق الناقل

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

  • مركز عملائي
  • MNC
  • SPN
  • IMSI
  • GID1
  • GID2
  • معرف الناقل

لمزيد من المعلومات حول دمج معرفات شركات الاتصالات ، راجع دمج معرفات شركات الاتصالات مع CarrierConfig .

عند تحميل تكوين الناقل يحدث

يحدث بناء قائمة أزواج القيمة الرئيسية:

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

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

باستخدام ملف config

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

  • إعدادات الاتصال الهاتفي للإطار الداخلي
  • قيم التكوين المرجعة من SDK ، على سبيل المثال ، في SmsManager
  • إعدادات التطبيق مثل قيم اتصال VVM في Dialer

مفاتيح التكوين

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

بناء التطبيق

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

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

إعلان فئة تتجاوز 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 Carrier للتعرف على المتطلبات.

إضافة APNs مع تطبيق الناقل

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

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

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

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

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