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