IP मल्टीमीडिया सबसिस्टम (IMS) को लागू करने में आपकी मदद करने के लिए Android 9 एक नया SystemApi इंटरफ़ेस पेश करता है जिसे ImsService कहा जाता है। ImsService API Android प्लेटफ़ॉर्म और एक विक्रेता या वाहक द्वारा प्रदान किए गए IMS कार्यान्वयन के बीच एक अच्छी तरह से परिभाषित इंटरफ़ेस है।
चित्र 1. आईएमएस सेवा सिंहावलोकन
ImsService इंटरफ़ेस का उपयोग करके, IMS कार्यान्वयनकर्ता प्लेटफ़ॉर्म को महत्वपूर्ण सिग्नलिंग जानकारी प्रदान कर सकता है, जैसे IMS पंजीकरण जानकारी, IMS एकीकरण पर SMS, और वॉइस और वीडियो कॉलिंग प्रदान करने के लिए MmTel सुविधा एकीकरण। ImsService API एक Android सिस्टम API भी है, जिसका अर्थ है कि इसे स्रोत के बजाय सीधे Android SDK के विरुद्ध बनाया जा सकता है। एक IMS एप्लिकेशन जिसे डिवाइस पर पहले से इंस्टॉल किया गया है, को Play Store अपडेट करने योग्य होने के लिए भी कॉन्फ़िगर किया जा सकता है।
उदाहरण और स्रोत
Android AOSP पर एक एप्लिकेशन प्रदान करता है जो परीक्षण और विकास उद्देश्यों के लिए ImsService API के कुछ हिस्सों को लागू करता है। आप आवेदन /testapps/ImsTestService पर प्राप्त कर सकते हैं।
आप ImsService API के लिए दस्तावेज़ ImsService में और API के अन्य वर्गों में पा सकते हैं।
कार्यान्वयन
ImsService API एक उच्च स्तरीय API है जो आपको उपलब्ध हार्डवेयर के आधार पर IMS को कई तरीकों से लागू करने देता है। उदाहरण के लिए, कार्यान्वयन इस बात पर निर्भर करता है कि क्या आईएमएस कार्यान्वयन पूरी तरह से एप्लिकेशन प्रोसेसर पर है या यदि यह आंशिक रूप से या पूरी तरह से मॉडेम पर लोड किया गया है। एंड्रॉइड बेसबैंड प्रोसेसर को ऑफलोड करने के लिए एक सार्वजनिक एचएएल प्रदान नहीं करता है, इसलिए मॉडेम में आपके एचएएल एक्सटेंशन का उपयोग करके कोई भी ऑफलोडिंग होनी चाहिए।
पुराने IMS कार्यान्वयन के साथ संगतता
हालांकि Android 9 में ImsService API शामिल है, लेकिन IMS के लिए पुराने कार्यान्वयन का उपयोग करने वाले डिवाइस API का समर्थन करने में सक्षम नहीं हैं। इन उपकरणों के लिए, पुराने एआईडीएल इंटरफेस और रैपर वर्गों को android.telephony.ims.compat
नेमस्पेस में स्थानांतरित कर दिया गया है। Android 9 में अपग्रेड करते समय, पुराने API का समर्थन जारी रखने के लिए पुराने उपकरणों को निम्न कार्य करने चाहिए।
-
android.telephony.ims.compat
नेमस्पेस API से विस्तार करने के लिए ImsService कार्यान्वयन का नाम स्थान बदलें। -
android.telephony.ims.compat.ImsService
इंटेंट-फ़िल्टर क्रिया का उपयोग करने के लिए,android.telephony.ims.ImsService
क्रिया के बजाय AndroidManifest.xml में ImsService सेवा परिभाषा को संशोधित करें।
इसके बाद फ्रेमवर्क विरासती ImsService
कार्यान्वयन के साथ काम करने के लिए Android 9 में प्रदान की गई संगतता परत का उपयोग करके ImsService से जुड़ जाएगा।
ढांचे के साथ ImsService पंजीकरण
ImsService API को एक सेवा के रूप में कार्यान्वित किया जाता है, जिसे Android फ्रेमवर्क IMS कार्यान्वयन के साथ संचार करने के लिए बाध्य करता है। एक ऐसे एप्लिकेशन को पंजीकृत करने के लिए तीन चरण आवश्यक हैं जो फ्रेमवर्क के साथ एक ImsService लागू करता है। सबसे पहले, ImsService कार्यान्वयन को एप्लिकेशन के AndroidManifest.xml
का उपयोग करके प्लेटफ़ॉर्म के साथ स्वयं को पंजीकृत करना होगा; दूसरा, यह परिभाषित करना चाहिए कि कौन सा आईएमएस कार्यान्वयन का समर्थन करता है (एमएमटेल या आरसीएस); और तीसरा, इसे या तो वाहक कॉन्फ़िगरेशन या डिवाइस ओवरले में विश्वसनीय IMS कार्यान्वयन के रूप में सत्यापित किया जाना चाहिए।
सेवा परिभाषा
आईएमएस एप्लिकेशन निम्नलिखित प्रारूप का उपयोग करके मैनिफेस्ट में एक 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>
AndroidManifest.xml
में service
परिभाषा निम्नलिखित विशेषताओं को परिभाषित करती है, जो सही संचालन के लिए आवश्यक हैं:
-
directBootAware="true"
: उपयोगकर्ता द्वारा डिवाइस को अनलॉक करने से पहले सेवा को खोजने औरtelephony
द्वारा चलाने की अनुमति देता है। उपयोगकर्ता द्वारा डिवाइस को अनलॉक करने से पहले सेवा डिवाइस एन्क्रिप्टेड स्टोरेज तक नहीं पहुंच सकती है। अधिक जानकारी के लिए, डायरेक्ट बूट मोड का समर्थन करें और फ़ाइल-आधारित एन्क्रिप्शन देखें। -
persistent="true"
: इस सेवा को लगातार चलाने की अनुमति देता है और स्मृति को पुनः प्राप्त करने के लिए सिस्टम द्वारा मारा नहीं जाता है। यह विशेषता केवल तभी काम करती है जब एप्लिकेशन को सिस्टम एप्लिकेशन के रूप में बनाया गया हो। -
permission="android.permission.BIND_IMS_SERVICE"
: सुनिश्चित करता है कि केवल एक प्रक्रिया जिसेBIND_IMS_SERVICE
की अनुमति दी गई है, वह आवेदन से जुड़ सकती है। यह एक दुष्ट ऐप को सेवा के लिए बाध्य होने से रोकता है, क्योंकि केवल सिस्टम एप्लिकेशन को ही फ्रेमवर्क द्वारा अनुमति दी जा सकती है।
सेवा को android.telephony.ims.ImsService
क्रिया के साथ intent-filter
तत्व भी निर्दिष्ट करना होगा। यह ढांचे को ImsService
खोजने की अनुमति देता है।
आईएमएस सुविधा विनिर्देश
AndroidManifest.xml में ImsService को Android सेवा के रूप में परिभाषित किए जाने के बाद, ImsService को यह परिभाषित करना होगा कि यह किन IMS सुविधाओं का समर्थन करता है। Android वर्तमान में MmTel और RCS सुविधाओं का समर्थन करता है, हालाँकि केवल MmTel को ही ढांचे में एकीकृत किया गया है। हालांकि ढांचे में एकीकृत कोई आरसीएस एपीआई नहीं है, फिर भी इसे आईएमएस सेवा की एक विशेषता के रूप में घोषित करने के फायदे हैं।
नीचे android.telephony.ims.ImsFeature
में परिभाषित मान्य विशेषताएं हैं जो एक ImsService प्रदान कर सकती हैं और एक स्पष्टीकरण और उदाहरण है कि एक IMS एप्लिकेशन इनमें से एक या सभी सुविधाओं को क्यों लागू करना चाहेगा। प्रत्येक सुविधा के परिभाषित होने के बाद, यह पृष्ठ बताता है कि कैसे ImsService
प्रत्येक सिम स्लॉट के लिए परिभाषित सुविधाओं के सेट की घोषणा करता है।
FEATURE_MMTEL
ImsService
IMS MMTEL सुविधा को लागू करता है, जिसमें सभी IMS मीडिया (IR.92 और IR.94 विशिष्टताओं) के लिए समर्थन शामिल है, सिवाय आपातकालीन कॉल के लिए IMS PDN से आपातकालीन अटैचमेंट को छोड़कर। ImsService
का कोई भी कार्यान्वयन जो MMTEL सुविधाओं का समर्थन करना चाहता है, उसे android.telephony.ims.MmTelFeature
बेस क्लास का विस्तार करना चाहिए और ImsService#createMmTelFeature
में एक कस्टम MmTelFeature
कार्यान्वयन वापस करना चाहिए।
FEATURE_EMERGENCY_MMTEL
इस सुविधा को घोषित करना केवल प्लेटफॉर्म को संकेत देता है कि आपातकालीन सेवाओं के लिए IMS PDN से आपातकालीन अटैचमेंट संभव है। यदि यह सुविधा आपकी ImsService
के लिए घोषित नहीं की गई है, तो प्लेटफ़ॉर्म हमेशा आपातकालीन सेवाओं के लिए सर्किट स्विच फ़ॉलबैक के लिए डिफ़ॉल्ट होगा। इस सुविधा को परिभाषित करने के लिए FEATURE_MMTEL
सुविधा को परिभाषित किया जाना चाहिए।
FEATURE_RCS
ImsService API किसी भी IMS RCS सुविधाओं को लागू नहीं करता है, लेकिन android.telephony.ims.RcsFeature
बेस क्लास अभी भी उपयोगी हो सकता है। फ्रेमवर्क स्वचालित रूप से ImsService से जुड़ जाता है और ImsService#createRcsFeature
को कॉल करता है जब यह पता चलता है कि पैकेज को RCS प्रदान करना चाहिए। यदि RCS सेवा से जुड़े सिम कार्ड को हटा दिया जाता है, तो फ्रेमवर्क स्वचालित रूप से RcsFeature#onFeatureRemoved
को कॉल करता है और फिर RCS सुविधा से संबद्ध ImsService
को साफ़ करता है। यह कार्यक्षमता कुछ कस्टम डिटेक्शन/बाइंडिंग लॉजिक को हटा सकती है जो एक RCS सुविधा को अन्यथा प्रदान करनी होगी।
समर्थित सुविधाओं का पंजीकरण
टेलीफ़ोनी ढांचा सबसे पहले ImsService से जुड़ता है ताकि वह उन सुविधाओं की क्वेरी कर सके जो ImsService#querySupportedImsFeatures
API का उपयोग करके समर्थन करती है। फ्रेमवर्क की गणना करने के बाद कि ImsService किन विशेषताओं का समर्थन करेगा, यह ImsService#create[...]Feature
को प्रत्येक सुविधा के लिए कॉल करेगा जिसके लिए ImsService जिम्मेदार होगा। यदि IMS अनुप्रयोग द्वारा समर्थित सुविधाएँ परिवर्तनों का समर्थन करती हैं, तो आप समर्थित सुविधाओं की पुनर्गणना करने के लिए ढांचे को संकेत देने के लिए ImsService#onUpdateSupportedImsFeatures
का उपयोग कर सकते हैं। ImsService के इनिशियलाइज़ेशन और बाइंडिंग के बारे में अधिक जानकारी के लिए नीचे दिया गया चित्र देखें।
चित्र 2: ImsService आरंभीकरण और बाइंडिंग
एक ImsService कार्यान्वयन की रूपरेखा का पता लगाना और सत्यापन
एक बार जब AndroidManifest.xml में ImsService को सही ढंग से परिभाषित कर दिया जाता है, तो प्लेटफ़ॉर्म को उपयुक्त होने पर ImsService से बाइंड करने के लिए (सुरक्षित रूप से) कॉन्फ़िगर किया जाना चाहिए। दो प्रकार की ImsServices हैं जिनसे ढांचा बंधता है:
- कैरियर "ओवरराइड" ImsService: ये ImsServices डिवाइस पर प्रीलोडेड होते हैं लेकिन एक या एक से अधिक सेल्युलर कैरियर्स से जुड़े होते हैं और केवल तभी बाउंड होंगे जब एक मैचिंग सिम कार्ड डाला जाएगा। यह का उपयोग करके कॉन्फ़िगर किया गया है
-
config_ims_mmtel_package_override_string
कैरियर एमएमटीईएल सुविधाओं को लागू करने वाली ImsServices के लिए कॉन्फिग कुंजी। -
config_ims_rcs_package_override_string
के लिए ImsServices RCS सुविधाओं को लागू कर रहा है।
-
- डिवाइस "डिफ़ॉल्ट" ImsService: यह डिफ़ॉल्ट ImsService है जिसे एक OEM द्वारा डिवाइस पर लोड किया जाता है और इसे सभी स्थितियों में IMS सेवाएं प्रदान करने के लिए डिज़ाइन किया जाना चाहिए जब कोई वाहक ImsService उपलब्ध नहीं है और उन स्थितियों में उपयोगी है जहां डिवाइस में कोई सिम कार्ड नहीं है डाला गया है या डाला गया सिम कार्ड के साथ वाहक ImsService स्थापित नहीं है। यह निम्न कॉन्फ़िगरेशन का उपयोग करके डिवाइस ओवरले में परिभाषित किया गया है:
-
config_ims_mmtel_package
: MMTEL सुविधाओं को लागू करता है -
config_ims_rcs_package
: RCS सुविधाओं को लागू करता है
-
एंड्रॉइड तृतीय-पक्ष डाउनलोड करने योग्य ImsService कार्यान्वयन के साथ ऐप्स का समर्थन नहीं करता है, इसलिए यहां परिभाषित किसी भी ImsService कार्यान्वयन को सिस्टम एप्लिकेशन होना आवश्यक है और उचित अनुदान देने के लिए /system/priv-app/ या /product/priv-app/ फ़ोल्डर में रहना चाहिए। अनुमतियाँ (अर्थात् फ़ोन, माइक्रोफ़ोन, स्थान, कैमरा और संपर्क अनुमतियाँ)। यह सत्यापित करके कि क्या आईएमएस कार्यान्वयन का पैकेज नाम ऊपर परिभाषित कैरियरकॉन्फिग या डिवाइस ओवरले मानों से मेल खाता है, केवल विश्वसनीय, पूर्व-स्थापित एप्लिकेशन बाध्य हैं।
अनुकूलन
ImsService को लागू करने वाले एप्लिकेशन केवल उन डिवाइसों पर बाध्य होते हैं जहां उन्हें वाहक के रूप में कॉन्फ़िगर किया गया है "ओवरराइड" ImsService या डिवाइस "डिफ़ॉल्ट" IMSService MMTEL या RCS कार्यक्षमता के लिए कॉन्फ़िगरेशन। ImsService उन IMS सुविधाओं को भी अनुमति देता है जो इसका समर्थन करती हैं (MMTEL और RCS) को ImsService#onUpdateSupportedImsFeatures
पद्धति का उपयोग करके अद्यतनों के माध्यम से गतिशील रूप से सक्षम या अक्षम किया जा सकता है। यह ढांचे को फिर से परिकलित करने के लिए ट्रिगर करता है कि कौन सी ImsServices बाध्य हैं और वे किन सुविधाओं का समर्थन करते हैं। यदि IMS एप्लिकेशन समर्थित सुविधाओं के बिना फ्रेमवर्क को अपडेट करता है, तो ImsService तब तक अनबाउंड रहेगा जब तक कि फोन रीबूट नहीं हो जाता है या एक नया सिम कार्ड नहीं डाला जाता है जो IMS एप्लिकेशन से मेल खाता हो।
एकाधिक ImsService के लिए बाध्यकारी प्राथमिकता
ढांचा उन सभी संभावित आईएमएस सेवाओं के लिए बाध्यकारी का समर्थन नहीं कर सकता है जो डिवाइस पर प्रीलोडेड हैं और प्रति-सुविधा के आधार पर निम्नलिखित क्रम में प्रति सिम स्लॉट (प्रत्येक सुविधा के लिए एक आईएमएस सेवा) तक दो आईएमएस सेवाओं तक बाध्य होंगे:
- जब कोई सिम कार्ड डाला जाता है तो कैरियरकॉन्फिग मान
config_ims_[mmtel/rcs]_package_override_string
द्वारा परिभाषित ImsService पैकेज नाम। -
config_ims_[mmtel/rcs]_package
के लिए डिवाइस ओवरले मान में परिभाषित ImsService पैकेज नाम, जिसमें कोई सिम कार्ड नहीं डाला गया है। इस ImsService को आपातकालीन MmTel सुविधा का समर्थन करना चाहिए।
जैसा कि ऊपर परिभाषित किया गया है, यदि आपकी ImsService डिफ़ॉल्ट होगी, तो उस पैकेज का उपयोग करने वाले प्रत्येक वाहक के लिए आपके पास या तो कैरियर कॉन्फिग में परिभाषित आपकी ImsService का पैकेज नाम होना चाहिए।
आइए प्रत्येक सुविधा के लिए इसे तोड़ दें। एक डिवाइस (सिंगल या मल्टी-सिम) के लिए सिंगल सिम कार्ड लोड के साथ, दो आईएमएस सुविधाएं संभव हैं: एमएमटेल और आरसीएस। फ़्रेमवर्क प्रत्येक सुविधा के लिए ऊपर परिभाषित क्रम में आबद्ध होने का प्रयास करेगा और यदि वाहक कॉन्फ़िगरेशन ओवरराइड में परिभाषित ImsService के लिए सुविधा उपलब्ध नहीं है, तो फ़्रेमवर्क आपके डिफ़ॉल्ट ImsService पर वापस आ जाएगा। इसलिए, उदाहरण के लिए, नीचे दी गई तालिका बताती है कि कौन सी आईएमएस सुविधा फ्रेमवर्क का उपयोग करेगा, निम्नलिखित सुविधाओं के साथ एक सिस्टम पर स्थापित आईएमएस सर्विसेज को लागू करने वाले तीन आईएमएस अनुप्रयोगों का उपयोग करेगा:
- कैरियर A ImsService RCS का समर्थन करता है
- कैरियर बी ImsService RCS और MMTel का समर्थन करता है
- OEM ImsService RCS और MMTel का समर्थन करता है
सिम कार्ड डाला गया | आरसीएस फ़ीचर | एमएमटेल फ़ीचर |
---|---|---|
कैरियर ए | कैरियर ए | ओईएम |
कैरियर बी | कैरियर बी | कैरियर बी |
कोई सिम नहीं | ओईएम | ओईएम |
मान्यकरण
IMS कार्यान्वयन को सत्यापित करने के लिए उपकरण स्वयं शामिल नहीं हैं क्योंकि IMS विनिर्देश बहुत बड़े हैं और विशेष सत्यापन उपकरण का उपयोग करते हैं। परीक्षण केवल यह सत्यापित कर सकते हैं कि टेलीफोनी ढांचा ImsService API को ठीक से प्रतिक्रिया देता है।
एक आईएमएस ऐप विकसित करें
एंड्रॉइड टेलीफोनी स्टैक के साथ इंटरफेस करने वाला एक आईएमएस ऐप विकसित करते समय, हम यह निर्दिष्ट करने की अनुशंसा करते हैं कि ऐप एक विशिष्ट वाहक सदस्यता के लिए संलग्न ImsService इंस्टेंस की स्थिति को सुन या संशोधित कर सकता है।
MMTEL और RCS सुविधाओं के लिए ImsService की स्थिति को सुनने या संशोधित करने के लिए, ImsMmTelManager
, ImsRcsManager
, या IMS-विशिष्ट ProvisioningManager
वर्ग का उदाहरण प्राप्त करने के लिए ImsManager
वर्ग का उपयोग करें। ऐप तब आईएमएस-विशिष्ट सेवा और प्रावधान राज्यों को सुन सकता है जैसे:
- MMTEL या RCS सुविधाएँ जो सक्षम और उपलब्ध हैं
- IMS पंजीकरण स्थिति में परिवर्तन होने पर अपडेट
- IMS सुविधाओं की प्रावधान स्थिति
- IMS सुविधाएँ उपयोगकर्ता ने सक्षम की हैं
ImsStateCallback का प्रयोग करें
हालांकि ImsService एक स्थायी रूप से बाध्य सेवा है, लेकिन जब कोई नया सिम कार्ड या एम्बेडेड सदस्यता सक्रिय हो जाती है या जब कोई वाहक कॉन्फ़िगरेशन बदलता है, तो जो सेवा बाध्य होती है वह बदल सकती है। चूंकि ImsService टेलीफ़ोनी प्रक्रिया का हिस्सा नहीं है, इसलिए IMS API को एक्सेस करने का प्रयास करते समय एक ऐप अप्रत्याशित अपवादों का अनुभव कर सकता है यदि ImsService अदृश्य रूप से क्रैश हो जाता है या सदस्यता या कॉन्फ़िगरेशन परिवर्तन के कारण अनबाउंड है।
Android 13 या उच्चतर चलाने वाले उपकरणों पर, यह निगरानी करने के लिए कि संबद्ध सदस्यता के लिए ImsService इंस्टेंस उपलब्ध है या अनुपलब्ध है, कोई ऐप ImsStateCallback
वर्ग का उपयोग कर सकता है। ImsMmTelManager
या ImsRcsManager
का उदाहरण प्राप्त करते समय, हम अनुशंसा करते हैं कि ऐप पहले ImsMmTelManager#registerImsStateCallback
या ImsRcsManager#registerImsStateCallback
का उपयोग करके IMS स्टेट कॉलबैक के लिए पंजीकरण करे। ImsService के फिर से उपलब्ध होने पर विशिष्ट सदस्यताओं के लिए कॉलबैक अपडेट प्राप्त करना जारी रखने के लिए, ऐप को ImsMmTelManager
, ImsRcsManager
, या ProvisioningManager
के माध्यम से पंजीकृत मौजूदा कॉलबैक को अपंजीकृत या त्यागना होगा; और नए कॉलबैक पंजीकृत करें।
यदि कोई सदस्यता है जो IMS का समर्थन नहीं करती है, तो फ्रेमवर्क ImsStateCallback#onUnavailable
को REASON_NO_IMS_SERVICE_CONFIGURED
कारण से कॉल करता है। इसका मतलब है कि ImsService और IMS से संबंधित API सदस्यता के लिए उपलब्ध नहीं हैं।
टेलीफोनी प्रक्रिया के क्रैश होने की संभावना नहीं होने की स्थिति में, ऐप ImsStateCallback#onError
प्राप्त करता है और अब पंजीकृत ImsStateCallback
इंस्टेंस पर अपडेट प्राप्त नहीं करता है। इस स्थिति से उबरने के लिए, ImsMmTelManager#registerImsStateCallback
या ImsRcsManager#registerImsStateCallback
पर कॉल करके संबद्ध सदस्यता के लिए ImsStateCallback
इंस्टेंस को फिर से पंजीकृत करें।