يقدم Android 9 واجهة SystemApi جديدة تسمى ImsService لمساعدتك في تنفيذ النظام الفرعي للوسائط المتعددة IP (IMS). واجهة برمجة تطبيقات ImsService هي واجهة محددة جيدًا بين نظام Android الأساسي والمورد أو تطبيق IMS المقدم من شركة الاتصالات.
الشكل 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.
الشكل 2: تهيئة وربط ImsService
الكشف عن الإطار والتحقق من تنفيذ ImsService
بمجرد تحديد ImsService بشكل صحيح في AndroidManifest.xml ، يجب تكوين النظام الأساسي للربط (بشكل آمن) بخدمة ImsService عند الاقتضاء. هناك نوعان من خدمات Ims التي يرتبط بها إطار العمل:
- خدمة ImsService "تجاوز" الناقل: يتم تحميل ImsServices هذه مسبقًا على الجهاز ولكنها متصلة بواحد أو أكثر من شركات الاتصالات الخلوية ولن يتم ربطها إلا عند إدخال بطاقة SIM مطابقة. تم تكوين هذا باستخدام ملف
-
config_ims_mmtel_package_override_string
مفتاح CarrierConfig لـ ImsServices التي تنفذ ميزات MMTEL. -
config_ims_rcs_package_override_string
لـ ImsServices التي تنفذ ميزات RCS.
-
- خدمة Ims "الافتراضية" للجهاز: هذه هي خدمة ImsService الافتراضية التي يتم تحميلها على الجهاز بواسطة الشركة المصنعة للمعدات الأصلية (OEM) ويجب تصميمها لتوفير خدمات 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
لا يمكن أن يدعم إطار العمل الربط بجميع خدمات Ims الممكنة التي تم تحميلها مسبقًا على الجهاز وسوف يرتبط بما يصل إلى خدمتين ImsService لكل فتحة SIM (خدمة Ims واحدة لكل ميزة) بالترتيب التالي على أساس كل ميزة:
- اسم حزمة ImsService المحدد بواسطة قيمة
config_ims_[mmtel/rcs]_package_override_string
عند إدخال بطاقة SIM. - اسم حزمة 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
.