تنفيذ نظام الرصد الدولي

يقدم Android 9 واجهة SystemApi جديدة تسمى ImsService لمساعدتك في تنفيذ نظام IP Multimedia الفرعي (IMS). ImsService API عبارة عن واجهة محددة جيدًا بين نظام Android الأساسي وتطبيق IMS المقدم من البائع أو الناقل.

نظرة عامة على خدمة ImsService

الشكل 1. نظرة عامة على ImsService

باستخدام واجهة ImsService، يمكن لمنفذ IMS توفير معلومات إشارات مهمة إلى النظام الأساسي، مثل معلومات تسجيل IMS، وتكامل الرسائل القصيرة عبر IMS، وتكامل ميزات MmTel لتوفير مكالمات الصوت والفيديو. واجهة برمجة تطبيقات ImsService هي واجهة برمجة تطبيقات نظام Android أيضًا، مما يعني أنه يمكن إنشاؤها مقابل Android SDK مباشرةً بدلاً من المصدر. يمكن أيضًا تكوين تطبيق IMS الذي تم تثبيته مسبقًا على الجهاز ليكون Play Store قابلاً للتحديث.

الأمثلة والمصادر

يوفر Android تطبيقًا على AOSP يقوم بتنفيذ أجزاء من ImsService API لأغراض الاختبار والتطوير. يمكنك العثور على التطبيق على /testapps/ImsTestService .

يمكنك العثور على وثائق ImsService API في ImsService وفي الفئات الأخرى في API.

تطبيق

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

التوافق مع تطبيقات IMS الأقدم

على الرغم من أن Android 9 يتضمن ImsService API، إلا أن الأجهزة التي تستخدم تطبيقًا أقدم لـ IMS غير قادرة على دعم واجهة برمجة التطبيقات. بالنسبة لهذه الأجهزة، تم نقل واجهات AIDL الأقدم وفئات الغلاف إلى مساحة الاسم android.telephony.ims.compat . عند الترقية إلى Android 9، يجب على الأجهزة القديمة القيام بما يلي لمواصلة دعم واجهة برمجة التطبيقات الأقدم.

  • قم بتغيير مساحة الاسم الخاصة بتطبيق ImsService لتمتد من واجهة برمجة تطبيقات مساحة الاسم android.telephony.ims.compat .
  • قم بتعديل تعريف خدمة ImsService في AndroidManifest.xml لاستخدام إجراء تصفية غرض android.telephony.ims.compat.ImsService ، بدلاً من إجراء android.telephony.ims.ImsService .

سيتم بعد ذلك ربط إطار العمل بـ ImsService باستخدام طبقة التوافق المتوفرة في Android 9 للعمل مع تطبيق ImsService القديم.

تسجيل ImsService مع الإطار

يتم تنفيذ واجهة برمجة تطبيقات ImsService كخدمة، والتي يرتبط بها إطار عمل Android من أجل التواصل مع تطبيق IMS. هناك ثلاث خطوات ضرورية لتسجيل تطبيق يقوم بتنفيذ ImsService مع إطار العمل. أولاً، يجب أن يسجل تطبيق ImsService نفسه في النظام الأساسي باستخدام AndroidManifest.xml الخاص بالتطبيق؛ ثانيًا، يجب تحديد ميزات IMS التي يدعمها التنفيذ (MmTel أو RCS)؛ وثالثًا، يجب التحقق من أنه تطبيق IMS موثوق به إما في تكوين الناقل أو تراكب الجهاز.

تعريف الخدمة

يقوم تطبيق IMS بتسجيل ImsService في إطار العمل عن طريق إضافة إدخال service إلى البيان باستخدام التنسيق التالي:

<service
    android:name="com.egcorp.ims.EgImsService"
    android:directBootAware="true"
    Android:persistent="true"
    ...
    android:permission="android.permission.BIND_IMS_SERVICE" >
    ...
    <intent-filter>
        <action android:name="android.telephony.ims.ImsService" />
    </intent-filter>
</service>

يحدد تعريف service في AndroidManifest.xml السمات التالية الضرورية للتشغيل الصحيح:

  • directBootAware="true" : يسمح باكتشاف الخدمة وتشغيلها عن طريق telephony قبل أن يقوم المستخدم بإلغاء قفل الجهاز. لا يمكن للخدمة الوصول إلى وحدة التخزين المشفرة للجهاز قبل أن يقوم المستخدم بإلغاء قفل الجهاز. لمزيد من المعلومات، راجع دعم وضع التمهيد المباشر والتشفير المستند إلى الملفات .
  • persistent="true" : يسمح بتشغيل هذه الخدمة بشكل مستمر وعدم إيقافها بواسطة النظام لاستعادة الذاكرة. تعمل هذه السمة فقط إذا تم إنشاء التطبيق كتطبيق نظام.
  • permission="android.permission.BIND_IMS_SERVICE" : يضمن أن العملية التي لديها إذن BIND_IMS_SERVICE الممنوح لها فقط هي التي يمكنها الارتباط بالتطبيق. يؤدي هذا إلى منع التطبيق المخادع من الارتباط بالخدمة، نظرًا لأن تطبيقات النظام فقط هي التي يمكن منح الإذن من خلال إطار العمل.

يجب أن تحدد الخدمة أيضًا عنصر intent-filter من خلال الإجراء android.telephony.ims.ImsService . هذا يسمح للإطار بالعثور على ImsService .

مواصفات ميزة IMS

بعد تعريف ImsService كخدمة Android في AndroidManifest.xml، يجب أن تحدد ImsService ميزات IMS التي يدعمها. يدعم Android حاليًا ميزات MmTel وRCS، ولكن MmTel فقط هو المدمج في إطار العمل. على الرغم من عدم وجود واجهات برمجة تطبيقات RCS مدمجة في إطار العمل، إلا أنه لا تزال هناك مزايا للإعلان عنها كميزة في ImsService.

فيما يلي الميزات الصالحة المحددة في android.telephony.ims.ImsFeature التي يمكن أن توفرها ImsService بالإضافة إلى شرح ومثال لسبب رغبة تطبيق IMS في تنفيذ واحدة من هذه الميزات أو جميعها. بعد تحديد كل ميزة، توضح هذه الصفحة كيفية إعلان ImsService عن مجموعة الميزات التي تحددها لكل فتحة SIM.

FEATURE_MMTEL

تطبق ImsService ميزة IMS MMTEL، التي تحتوي على دعم لجميع وسائط IMS (مواصفات IR.92 وIR.94) باستثناء إرفاق الطوارئ بـ IMS PDN لمكالمات الطوارئ. يجب أن يقوم أي تطبيق لـ ImsService يرغب في دعم ميزات MMTEL بتوسيع الفئة الأساسية android.telephony.ims.MmTelFeature وإرجاع تطبيق MmTelFeature مخصص في ImsService#createMmTelFeature .

FEATURE_EMERGENCY_MMTEL

إن الإعلان عن هذه الميزة يشير فقط إلى النظام الأساسي الذي يمكن ربطه بحالة الطوارئ بـ IMS PDN لخدمات الطوارئ. إذا لم يتم الإعلان عن هذه الميزة لـ ImsService ، فسيتم تعيين النظام الأساسي دائمًا على خيار Circuit Switch Fallback لخدمات الطوارئ. يجب تعريف الميزة FEATURE_MMTEL حتى يتم تعريف هذه الميزة.

FEATURE_RCS

لا تقوم واجهة برمجة التطبيقات ImsService بتطبيق أي من ميزات IMS RCS، ولكن يمكن أن تظل الفئة الأساسية android.telephony.ims.RcsFeature مفيدة. يرتبط إطار العمل تلقائيًا بـ ImsService ويستدعي ImsService#createRcsFeature عندما يكتشف أن الحزمة يجب أن توفر RCS. إذا تمت إزالة بطاقة SIM المرتبطة بخدمة RCS، يقوم إطار العمل تلقائيًا باستدعاء RcsFeature#onFeatureRemoved ثم يقوم بتنظيف ImsService المرتبط بميزة RCS. يمكن لهذه الوظيفة إزالة بعض منطق الكشف/الربط المخصص الذي قد يتعين على ميزة RCS توفيره.

تسجيل الميزات المدعومة

يرتبط إطار عمل الاتصال الهاتفي أولاً بـ ImsService للاستعلام عن الميزات التي يدعمها باستخدام ImsService#querySupportedImsFeatures API. بعد أن يقوم إطار العمل بحساب الميزات التي ستدعمها ImsService، فإنه سوف يستدعي ImsService#create[...]Feature لكل ميزة ستكون ImsService مسؤولة عنها. إذا كانت الميزات التي يدعمها تطبيق IMS تتغير، فيمكنك استخدام ImsService#onUpdateSupportedImsFeatures للإشارة إلى إطار العمل لإعادة حساب الميزات المدعومة. راجع الرسم البياني أدناه للحصول على مزيد من المعلومات حول تهيئة ImsService وربطها.

ImsService التهيئة والربط

الشكل 2: تهيئة ImsService وربطها

كشف الإطار والتحقق من تنفيذ ImsService

بمجرد تعريف ImsService بشكل صحيح في AndroidManifest.xml، يجب تكوين النظام الأساسي للربط (بشكل آمن) بـ ImsService عندما يكون ذلك مناسبًا. هناك نوعان من ImsServices التي يرتبط بها الإطار:

  1. "تجاوز" شركة الاتصالات ImsService: يتم تحميل خدمات ImsServices هذه مسبقًا على الجهاز ولكنها متصلة بواحدة أو أكثر من شركات الاتصالات الخلوية ولن يتم ربطها إلا عند إدخال بطاقة SIM مطابقة. تم تكوين هذا باستخدام
  2. ImsService "الافتراضي" للجهاز: هذا هو ImsService الافتراضي الذي يتم تحميله على الجهاز بواسطة OEM ويجب تصميمه لتوفير خدمات IMS في جميع المواقف عندما لا يكون مشغل ImsService متاحًا ويكون مفيدًا في المواقف التي لا يحتوي فيها الجهاز على بطاقة SIM التي تم إدخالها أو أن بطاقة SIM التي تم إدخالها لا تحتوي على مشغل شبكة الجوال ImsService المثبت عليها. يتم تعريف ذلك في تراكب الجهاز باستخدام التكوينات التالية:

لا يدعم Android التطبيقات التي تحتوي على تطبيقات ImsService قابلة للتنزيل من جهات خارجية، لذا فإن أي تطبيقات ImsService المحددة هنا مطلوبة لتكون تطبيقات نظام ويجب أن تكون موجودة في المجلد /system/priv-app/ أو /product/priv-app/ لمنح الصلاحيات المناسبة الأذونات (أي أذونات الهاتف والميكروفون والموقع والكاميرا وجهات الاتصال). من خلال التحقق مما إذا كان اسم حزمة تطبيق IMS يطابق CarrierConfig أو قيم تراكب الجهاز المحددة أعلاه، يتم ربط التطبيقات الموثوقة والمثبتة مسبقًا فقط.

التخصيص

يتم ربط التطبيقات التي تنفذ ImsService فقط على الأجهزة التي تم تكوينها فيها على أنها "تجاوز" ImsService للناقل أو تكوينات ImsService "الافتراضية" للجهاز لوظيفة MMTEL أو RCS. يسمح ImsService أيضًا بتمكين ميزات IMS التي يدعمها (MMTEL وRCS) أو تعطيلها ديناميكيًا عبر التحديثات باستخدام أسلوب ImsService#onUpdateSupportedImsFeatures . يؤدي هذا إلى تشغيل إطار العمل لإعادة حساب ImsServices المرتبطة والميزات التي تدعمها. إذا قام تطبيق IMS بتحديث إطار العمل دون دعم أي ميزات، فسيتم إلغاء ربط ImsService حتى يتم إعادة تشغيل الهاتف أو يتم إدخال بطاقة SIM جديدة تتوافق مع تطبيق IMS.

الأولوية الملزمة لعدة ImsService

لا يمكن لإطار العمل دعم الربط بجميع خدمات ImsServices المحتملة التي تم تحميلها مسبقًا على الجهاز وسيتم ربط ما يصل إلى خدمتي ImsServices لكل فتحة SIM (خدمة ImsService واحدة لكل ميزة) بالترتيب التالي على أساس كل ميزة:

  1. اسم حزمة ImsService المحدد بواسطة قيمة CarrierConfig config_ims_[mmtel/rcs]_package_override_string عند إدخال بطاقة SIM.
  2. اسم حزمة ImsService المحدد في قيمة تراكب الجهاز لـ config_ims_[mmtel/rcs]_package بما في ذلك الحالة التي لا يتم فيها إدخال بطاقة SIM. يجب أن تدعم ImsService ميزة Emergency MmTel.

يجب أن يكون لديك إما اسم الحزمة الخاصة بـ ImsService المحددة في CarrierConfig لكل شركة من شركات النقل التي ستستخدم تلك الحزمة أو في تراكب الجهاز إذا كانت ImsService هي الخدمة الافتراضية، كما هو محدد أعلاه.

دعونا نحلل هذا لكل ميزة. بالنسبة لجهاز (واحد أو متعدد شرائح SIM) مزود ببطاقة SIM واحدة محملة، هناك ميزتان محتملتان لـ IMS: MMTel وRCS. سيحاول إطار العمل الارتباط بالترتيب المحدد أعلاه لكل ميزة، وإذا لم تكن الميزة متاحة لـ ImsService المحددة في تجاوز تكوين الناقل، فسيعود إطار العمل إلى ImsService الافتراضي الخاص بك. لذلك، على سبيل المثال، يصف الجدول أدناه ميزة IMS التي سيستخدمها إطار العمل في ضوء ثلاثة تطبيقات IMS تنفذ ImsServices مثبتة على نظام يحتوي على الميزات التالية:

  • الناقل يدعم ImsService RCS
  • يدعم Carrier B ImsService خدمات RCS وMMTel
  • OEM ImsService يدعم RCS وMMTel
تم إدخال بطاقة SIM ميزة RCS ميزة إم إم تي إل
الناقل أ الناقل أ تصنيع المعدات الأصلية
الناقل ب الناقل ب الناقل ب
لا يوجد شريحة اتصال تصنيع المعدات الأصلية تصنيع المعدات الأصلية

تصديق

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

تطوير تطبيق IMS

عند تطوير تطبيق IMS الذي يتفاعل مع مكدس هاتف Android، نوصي بتحديد أن التطبيق يمكنه الاستماع إلى حالة مثيل ImsService المرفق لاشتراك شركة اتصالات معينة أو تعديلها.

للاستماع إلى حالة ImsService لميزات MMTEL وRCS أو تعديلها، استخدم فئة ImsManager للحصول على مثيل لفئة ImsMmTelManager أو ImsRcsManager أو فئة ProvisioningManager الخاصة بـ IMS. يمكن للتطبيق بعد ذلك الاستماع إلى حالات الخدمة وتوفير الخدمة الخاصة بـ IMS مثل:

  • ميزات MMTEL أو RCS الممكّنة والمتوفرة
  • التحديثات عندما تتغير حالة تسجيل IMS
  • حالة توفير ميزات IMS
  • ميزات IMS التي قام المستخدم بتمكينها

استخدم ImsStateCallback

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

على الأجهزة التي تعمل بنظام التشغيل Android 13 أو الإصدارات الأحدث، لمراقبة ما إذا كان مثيل ImsService للاشتراك المرتبط متاحًا أم غير متاح، يمكن للتطبيق استخدام فئة ImsStateCallback . عند الحصول على مثيل ImsMmTelManager أو ImsRcsManager ، نوصي بأن يقوم التطبيق أولاً بالتسجيل لاستدعاء حالة IMS باستخدام ImsMmTelManager#registerImsStateCallback أو ImsRcsManager#registerImsStateCallback . لمواصلة تلقي تحديثات رد الاتصال لاشتراكات محددة عندما يصبح ImsService متاحًا مرة أخرى، يجب أن يقوم التطبيق بإلغاء تسجيل أو تجاهل عمليات رد الاتصال الموجودة المسجلة من خلال ImsMmTelManager أو ImsRcsManager أو ProvisioningManager ؛ وتسجيل عمليات الاسترجاعات الجديدة.

إذا كان هناك اشتراك لا يدعم IMS، فسيستدعي إطار العمل ImsStateCallback#onUnavailable مع السبب REASON_NO_IMS_SERVICE_CONFIGURED . وهذا يعني أن ImsService وواجهات برمجة التطبيقات المرتبطة بـ IMS غير متاحة للاشتراك.

في حالة تعطل عملية الاتصال الهاتفي، وهو أمر غير محتمل، يتلقى التطبيق ImsStateCallback#onError ولم يعد يتلقى تحديثات على مثيل ImsStateCallback المسجل. للتعافي من هذا الشرط، قم بإعادة تسجيل مثيل ImsStateCallback للاشتراك المرتبط عن طريق استدعاء ImsMmTelManager#registerImsStateCallback أو ImsRcsManager#registerImsStateCallback .