تنفيذ IMS

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

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

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

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

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

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

يوفر 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 مساحة الاسم API.
  • قم بتعديل تعريف خدمة ImsService في AndroidManifest.xml لاستخدام إجراء android.telephony.ims.compat.ImsService intent-filter بدلاً من إجراء android.telephony.ims.ImsService .

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

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

يتم تنفيذ ImsService API كخدمة يلتزم بها إطار عمل 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 الخاصة بك ، فستظل المنصة دائمًا بشكل افتراضي على تبديل تبديل الدوائر لخدمات الطوارئ. يجب تحديد ميزة 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 . بعد أن يحسب إطار العمل الميزات التي ستدعمها ImsService ، فإنه ImsService#create[...]Feature لكل ميزة ستكون ImsService مسؤولة عنها. إذا تغيرت الميزات التي يدعمها تطبيق IMS ، فيمكنك استخدام ImsService#onUpdateSupportedImsFeatures للإشارة إلى إطار العمل لإعادة حساب الميزات المدعومة. انظر الرسم البياني أدناه للحصول على مزيد من المعلومات حول تهيئة وربط ImsService.

تهيئة وربط ImsService

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

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

بمجرد تحديد ImsService بشكل صحيح في AndroidManifest.xml ، يجب تكوين النظام الأساسي للربط (بشكل آمن) بخدمة ImsService عند الاقتضاء. هناك نوعان من خدمات Ims التي يرتبط بها إطار العمل:

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

لا يدعم 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

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

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

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

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

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

تصديق

لا يتم تضمين أدوات التحقق من تنفيذ IMS نفسه نظرًا لأن مواصفات IMS كبيرة للغاية وتستخدم معدات تحقق خاصة. يمكن للاختبارات فقط التحقق من أن إطار العمل الهاتفي يستجيب بشكل صحيح لواجهة برمجة تطبيقات 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 .