يقدّم نظام التشغيل Android 9 واجهة SystemApi جديدة تُسمى ImsService لمساعدتك في تنفيذ نظام IP Multimedia Subsystem (IMS). واجهة برمجة التطبيقات ImsService API هي واجهة محدّدة جيدًا بين نظام Android الأساسي وتنفيذ IMS الذي يقدّمه المورّد أو شركة الجوّال.
الشكل 1: نظرة عامة على ImsService
باستخدام واجهة ImsService، يمكن لمنفِّذ IMS تقديم معلومات مهمة عن الإشارات إلى المنصة، مثل معلومات تسجيل IMS ورسائل SMS التي يتم دمجها عبر IMS ودمج ميزة MmTel لتوفير مكالمات voice and video. واجهة برمجة التطبيقات ImsService API هي أيضًا واجهة برمجة تطبيقات لنظام Android، ما يعني أنّه يمكن إنشاؤها باستخدام حزمة تطوير البرامج (SDK) لنظام Android مباشرةً بدلاً من استخدام المصدر. يمكن أيضًا ضبط تطبيق IMS الذي تم تثبيته مسبقًا على الجهاز ليصبح قابلاً للتحديث من خلال "متجر Play".
الأمثلة والمصدر
يوفّر Android تطبيقًا على AOSP ينفّذ أجزاءً من ImsService API لأغراض الاختبار والتطوير. يمكنك العثور على التطبيق على /testapps/ImsTestService.
يمكنك العثور على مستندات واجهة برمجة التطبيقات ImsService API في ImsService وفي الفئات الأخرى في واجهة برمجة التطبيقات.
التنفيذ
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
intent-filter بدلاً من الإجراء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) باستثناء الإرفاق الطارئ إلى
رقم PDN لنظام IMS لمكالمات الطوارئ. أيّ عملية تنفيذ لـ ImsService
تريد
إتاحة ميزات MMTEL يجب أن تُوسّع الفئة الأساسية
android.telephony.ims.MmTelFeature
وتُعرِض عملية تنفيذ مخصّصة
MmTelFeature
في
ImsService#createMmTelFeature
.
FEATURE_EMERGENCY_MMTEL
لا يؤدي تحديد هذه الميزة إلا إلى إرسال إشارة إلى المنصة بأنّه يمكن ربط الطوارئ بشبكة PDN في IMS لخدمات الطوارئ. في حال عدم الإفصاح عن هذه الميزة
لتطبيق ImsService
، سيستخدم النظام الأساسي دائمًا ميزة "الرجوع إلى شبكة الجوَّال"
لخدمات الطوارئ. يجب تحديد ميزة FEATURE_MMTEL
لتحديد هذه الميزة.
FEATURE_RCS
لا تُنفِّذ واجهة برمجة التطبيقات ImsService API أيًا من ميزات 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 وربطه.
الشكل 2: إعداد ImsService وربطه
رصد إطار العمل والتحقّق من تنفيذ ImsService
بعد تحديد ImsService بشكل صحيح في ملف AndroidManifest.xml، يجب ضبط النظام الأساسي للربط (بأمان) بخدمة ImsService عند الضرورة. هناك نوعان من خدمات ImsServices التي يرتبط بها إطار العمل:
- "إلغاء" مشغّل شبكة الجوّال للخدمة ImsService: يتم تحميل خدمات ImsService هذه مسبقًا على
الجهاز، ولكن يتم ربطها بمشغّل شبكة جوّال واحد أو أكثر ولن يتم
ربطها إلا عند إدخال شريحة SIM مطابقة. يتم ضبط ذلك باستخدام
config_ims_mmtel_package_override_string
مفتاح CarrierConfig لخدمة ImsServices التي تُنفِّذ ميزات MMTEL-
config_ims_rcs_package_override_string
لتطبيق ImsServices الذي ينفِّذ ميزات RCS
- ImsService "التلقائية" للجهاز: هذه هي ImsService التلقائية التي يحمّلها المصنّع الأصلي للجهاز ويُفترض أن تكون مصمّمة لتقديم خدمات IMS في كل الحالات التي لا تتوفّر فيها ImsService لمشغّل شبكة الجوّال، وهي مفيدة في الحالات التي لا يتم فيها إدخال شريحة SIM في الجهاز أو عندما لا يتم تثبيت ImsService لمشغّل شبكة الجوّال على شريحة SIM التي تم إدخالها. يتم تحديد ذلك في المحتوى المركّب على الأجهزة باستخدام الإعدادات التالية:
config_ims_mmtel_package
: تنفيذ ميزات MMTEL-
config_ims_rcs_package
: تفعيل ميزات RCS
لا يتيح نظام التشغيل 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 المحتملة التي يتم تحميلها مسبقًا على الجهاز، وسيتم ربط ما يصل إلى خدمتَي ImsService لكل فتحة شريحة SIM (خدمة ImsService واحدة لكل ميزة) بالترتيب التالي لكل ميزة:
- تشير هذه السمة إلى اسم حزمة ImsService التي تحدّدها قيمة CarrierConfig
config_ims_[mmtel/rcs]_package_override_string
في حال إدراج شريحة SIM. - اسم حزمة ImsService المحدَّد في قيمة تراكب الجهاز لملف APK
config_ims_[mmtel/rcs]_package
، بما في ذلك الحالة التي لا تكون فيها شريحة SIM مُدخَلة يجب أن تتوافق خدمة ImsService مع ميزة MmTel في حالات الطوارئ.
يجب أن يكون اسم حزمة ImsService محدّدًا في ملف CarrierConfig لكل مشغل شبكة جوّال سيستخدم هذه الحزمة أو في ملف تداخل الجهاز إذا كانت ImsService هي الخدمة التلقائية، كما هو محدّد أعلاه.
لنلقِ نظرة على كل ميزة على حدة. بالنسبة إلى الجهاز (شريحة SIM واحدة أو متعددة) الذي تم تحميل شريحة SIM واحدة فيه، يمكن استخدام ميزتَين من ميزات IMS: MMTel وRCS. سيحاول إطار العمل الربط بالترتيب المحدّد أعلاه لكل ميزة، وإذا لم تكن الميزة متاحة لخدمة ImsService المحدّدة في التبديل لإعدادات مشغّل شبكة الجوّال، سيستعين إطار العمل بخدمة ImsService التلقائية. على سبيل المثال، يوضّح الجدول التالي ميزة IMS التي سيستخدمها الإطار المرجعي، مع العلم أنّه تم توفير ثلاثة تطبيقات IMS تُنفِّذ ImsServices على نظام يمتاز بالميزات التالية:
- يتوافق مشغّل شبكة الجوّال A ImsService مع خدمات الاتصالات التفاعلية (RCS).
- يتوافق ImsService لمشغّل شبكة الجوّال (ب) مع خدمات RCS وMMTel.
- توفُّر خدمة ImsService من المصنّع الأصلي للجهاز لخدمات RCS وMMTel
تم إدخال شريحة SIM | ميزة RCS | ميزة MMTel |
---|---|---|
مشغّل شبكة الجوّال (أ) | مشغّل شبكة الجوّال (أ) | المصنّع الأصلي للجهاز |
مشغّل شبكة الجوّال (ب) | شركة النقل "ب" | مشغّل شبكة الجوّال (ب) |
لا تتوفر شريحة SIM. | المصنّع الأصلي للجهاز | المصنّع الأصلي للجهاز |
التحقُّق
لا يتم تضمين أدوات التحقّق من عملية تنفيذ IMS نفسها لأنّ مواصفات IMS كبيرة جدًا وتستخدم معدات خاصة للتحقّق. لا يمكن للاختبارات سوى التحقّق من أنّ إطار عمل خدمات الهاتف يستجيب بشكل صحيح لواجهة برمجة التطبيقات ImsService API.
تطوير تطبيق 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 أو إصدار أحدث، يمكن للتطبيق استخدام فئة ImsStateCallback
لرصد ما إذا كانت مثيل ImsService للاشتراك المرتبط
متاحًا أو غير متاح. عند الحصول على مثال ImsMmTelManager
أو ImsRcsManager
، ننصح بأن يسجّل التطبيق أولاً لمعاودة الاتصال بحالة IMS باستخدام ImsMmTelManager#registerImsStateCallback
أو ImsRcsManager#registerImsStateCallback
.
لمواصلة تلقّي إشعارات بشأن عمليات تسجيل المكالمات لاشتراكات معيّنة عندما يصبح ImsMmTelManager
ImsService متاحًا مرة أخرى، يجب أن يُلغي التطبيق تسجيل عمليات تسجيل المكالمات الحالية المسجَّلة من خلال ImsMmTelManager
أو ImsRcsManager
أو
ProvisioningManager
أو يتخلّص منها، وأن يسجّل عمليات تسجيل مكالمات جديدة.
إذا كان هناك اشتراك لا يتيح استخدام IMS، يُجري إطار العمل مكالمة إلى ImsStateCallback#onUnavailable
بالسبب التالي:
REASON_NO_IMS_SERVICE_CONFIGURED
.
وهذا يعني أنّ ImsService وواجهات برمجة التطبيقات المتعلقة بخدمة IMS غير متاحة
للاشتراك.
في حال تعطُّل عملية الاتصال الهاتفي، يتلقّى التطبيق
ImsStateCallback#onError
ويتوقف عن تلقّي آخر المعلومات حول مثيل ImsStateCallback
المسجَّل.
لحلّ هذه المشكلة، عليك إعادة تسجيل مثيل ImsStateCallback
ل
الاشتراك المرتبط من خلال الاتصال بأحد الرقمَين التاليَين:
ImsMmTelManager#registerImsStateCallback
أو
ImsRcsManager#registerImsStateCallback
.