IMS প্রয়োগ করা

Android 9-এ IP মাল্টিমিডিয়া সাবসিস্টেম (IMS) প্রয়োগ করতে সাহায্য করার জন্য ImsService নামের একটি SystemApi ইন্টারফেস চালু করা হয়েছে। ImsService API হল Android প্ল্যাটফর্ম এবং ভেন্ডর বা পরিষেবা প্রদানকারীর IMS ইমপ্লিমেন্টেশনের মধ্যে একটি সুনির্দিষ্ট ইন্টারফেস।

ImsService ওভারভিউ

ছবি ১. ImsService ওভারভিউ

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 কোনও পাবলিক HAL প্রদান করে না, তাই কোনও অফলোডিং অবশ্যই আপনার HAL এক্সটেনশন ব্যবহার করে মডেমের সাথে করতে হবে।

পুরনো IMS ইমপ্লিমেন্টেশনের সাথে মানানসই

Android 9-এ ImsService API থাকলেও, IMS-এর জন্য পুরনো ইমপ্লিমেন্টেশন ব্যবহার করা ডিভাইস API সাপোর্ট করতে পারে না। এইসব ডিভাইসের জন্য, পুরনো AIDL ইন্টারফেস ও র‍্যাপার ক্লাসকে android.telephony.ims.compat নেমস্পেসে সরিয়ে দেওয়া হয়েছে। Android 9-এ আপগ্রেড করার সময়, পুরনো API-এর সহায়তা চালিয়ে যেতে হলে পুরনো ডিভাইসগুলিকে নিচে উল্লেখ করা কাজগুলি করতে হবে।

  • ImsService ইমপ্লিমেন্টেশনের নেমস্পেস পরিবর্তন করে android.telephony.ims.compat নেমস্পেস API থেকে এক্সটেন্ড করুন।
  • android.telephony.ims.ImsService অ্যাকশনের পরিবর্তে android.telephony.ims.compat.ImsService intent-filter অ্যাকশন ব্যবহার করতে, AndroidManifest.xml-এ ImsService পরিষেবা সংজ্ঞা পরিবর্তন করুন।

ফ্রেমওয়ার্কটি তখন Android 9-এ দেওয়া কম্প্যাটিবিলিটি লেয়ার ব্যবহার করে ImsService-এর সাথে বাইন্ড করবে যাতে লিগ্যাসি ImsService ইমপ্লিমেন্টেশনের সাথে কাজ করা যায়।

ফ্রেমওয়ার্কের সাথে ImsService রেজিস্ট্রেশন

ImsService API একটি পরিষেবা হিসেবে প্রয়োগ করা হয়, যা IMS প্রয়োগের সাথে যোগাযোগ করার জন্য Android ফ্রেমওয়ার্কের সাথে বাইন্ড করা হয়। ফ্রেমওয়ার্কের সাথে ImsService প্রয়োগ করে এমন অ্যাপ রেজিস্টার করতে তিনটি ধাপ প্রয়োজন। প্রথমত, ImsService ইমপ্লিমেন্টেশনকে অবশ্যই অ্যাপের AndroidManifest.xml ব্যবহার করে প্ল্যাটফর্মে নিজেকে রেজিস্টার করতে হবে; দ্বিতীয়ত, ইমপ্লিমেন্টেশন কোন IMS ফিচার (MmTel বা RCS) সমর্থন করে তা নির্ধারণ করতে হবে; এবং তৃতীয়ত, এটি ক্যারিয়ার কনফিগারেশন বা ডিভাইস ওভারলেতে বিশ্বস্ত IMS ইমপ্লিমেন্টেশন হিসাবে যাচাই করা আবশ্যক।

পরিষেবার সংজ্ঞা

IMS অ্যাপ নিম্নলিখিত ফর্ম্যাট ব্যবহার করে ম্যানিফেস্টে একটি service এন্ট্রি যোগ করার মাধ্যমে ফ্রেমওয়ার্কের সাথে একটি ImsService রেজিস্টার করে:

<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-কে AndroidManifest.xml-এ Android পরিষেবা হিসেবে সংজ্ঞায়িত করার পরে, ImsService-কে অবশ্যই কোন কোন IMS ফিচার কাজ করে তা সংজ্ঞায়িত করতে হবে। Android বর্তমানে MmTel ও RCS ফিচার কাজ করে, তবে ফ্রেমওয়ার্কে শুধু MmTel ই ইন্টিগ্রেট করা আছে। ফ্রেমওয়ার্কে কোনও RCS API ইন্টিগ্রেট করা না থাকলেও, এটিকে ImsService-এর ফিচার হিসেবে ঘোষণা করার সুবিধা রয়েছে।

android.telephony.ims.ImsFeature-এ সংজ্ঞায়িত বৈধ ফিচারগুলি নিচে দেওয়া হল যেগুলি একটি ImsService প্রদান করতে পারে এবং কেন একটি IMS অ্যাপ এই ফিচারগুলির মধ্যে একটি বা সবকটি প্রয়োগ করতে চাইবে তার ব্যাখ্যা ও উদাহরণ দেওয়া হল। প্রতিটি ফিচারকে সংজ্ঞায়িত করার পরে, এই পৃষ্ঠাটি কীভাবে ImsService ফিচারগুলির সেট ঘোষণা করে তা বর্ণনা করে যা এটি প্রতিটি সিম স্লটের জন্য সংজ্ঞায়িত করে।

FEATURE_MMTEL

ImsService-এ IMS MMTEL ফিচার প্রয়োগ করা হয়, যার মধ্যে জরুরি কলিংয়ের জন্য IMS PDN-এর সাথে জরুরি অ্যাটাচমেন্ট ছাড়া সব IMS মিডিয়া (IR.92 ও IR.94 স্পেসিফিকেশন) কাজ করে। 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-এর সাথে অটোমেটিক বাইন্ড করে এবং প্যাকেজটি RCS প্রদান করবে বলে শনাক্ত করলে ImsService#createRcsFeature কল করে। RCS পরিষেবার সাথে যুক্ত সিম কার্ড সরিয়ে দেওয়া হলে, ফ্রেমওয়ার্ক অটোমেটিক RcsFeature#onFeatureRemoved-এ কল করে এবং তারপরে RCS ফিচারের সাথে যুক্ত ImsService পরিষ্কার করে দেয়। এই কার্যকারিতা কিছু কাস্টম শনাক্তকরণ বা বাইন্ডিং লজিক সরিয়ে দিতে পারে যা অন্যথায় RCS ফিচারকে প্রদান করতে হয়।

কাজ করে এমন ফিচারের রেজিস্ট্রেশন

টেলিফোনি ফ্রেমওয়ার্ক প্রথমে ImsService-এর সাথে বাইন্ড করে, যাতে ImsService#querySupportedImsFeatures API ব্যবহার করে সেটি যেসব ফিচার সাপোর্ট করে সেই সম্পর্কে কোয়েরি করা যায়। ImsService কোন কোন ফিচার কাজ করবে তা ফ্রেমওয়ার্ক গণনা করার পরে, ImsService যে ফিচারের জন্য দায়ী থাকবে সেগুলির প্রত্যেকটির জন্য ImsService#create[...]Feature কল করবে। IMS অ্যাপে কাজ করে এমন ফিচার পরিবর্তন হলে, আপনি ImsService#onUpdateSupportedImsFeatures ব্যবহার করে ফ্রেমওয়ার্ককে সিগন্যাল দিতে পারেন যাতে কাজ করে এমন ফিচার আবার গণনা করা যায়। ImsService-এর ইনিশিয়ালাইজেশন ও বাইন্ডিং সম্পর্কে আরও তথ্য পেতে নিচের ডায়াগ্রাম দেখুন।

ImsService ইনিশিয়ালাইজ ও বাইন্ডিং

ছবি ২. ImsService ইনিশিয়ালাইজেশন ও বাইন্ডিং

ImsService ইমপ্লিমেন্টেশনের ফ্রেমওয়ার্ক শনাক্তকরণ ও যাচাইকরণ

AndroidManifest.xml-এ ImsService সঠিকভাবে সংজ্ঞায়িত করা হয়ে গেলে, উপযুক্ত হলে প্ল্যাটফর্মকে অবশ্যই ImsService-এর সাথে (নিরাপদে) বাইন্ড করার জন্য কনফিগার করতে হবে। ফ্রেমওয়ার্কের সাথে বাইন্ড করা যায় এমন দুই ধরনের ImsServices আছে:

  1. ক্যারিয়ার "ওভাররাইড" ImsService: এই ImsServiceগুলি ডিভাইসে আগে থেকেই লোড করা থাকে, তবে এগুলি এক বা একাধিক মোবাইল পরিষেবা প্রদানকারীর সাথে অ্যাটাচ করা থাকে এবং ম্যাচিং সিম কার্ড ঢোকানো হলেই এগুলি বাউন্ড হবে। এটি
  2. ডিভাইসের "ডিফল্ট" ImsService: এটি হল ডিফল্ট ImsService যা OEM-এর মাধ্যমে ডিভাইসে লোড করা হয় এবং এটি এমনভাবে ডিজাইন করা উচিত যাতে পরিষেবা প্রদানকারীর ImsService উপলভ্য না থাকলে সব পরিস্থিতিতে IMS পরিষেবা প্রদান করা যায় এবং ডিভাইসে সিম কার্ড না থাকলে বা সিম কার্ডে পরিষেবা প্রদানকারীর ImsService ইনস্টল করা না থাকলে এটি কার্যকর হয়। এটি নিম্নলিখিত কনফিগারেশন ব্যবহার করে ডিভাইস ওভারলেতে সংজ্ঞায়িত করা হয়েছে:

Android, থার্ড-পার্টি ডাউনলোড করা ImsService ইমপ্লিমেন্টেশন সহ অ্যাপকে সাপোর্ট করে না, তাই এখানে সংজ্ঞায়িত যেকোনও ImsService ইমপ্লিমেন্টেশনকে সিস্টেম অ্যাপ হতে হবে এবং উপযুক্ত অনুমতি (যেমন ফোন, মাইক্রোফোন, লোকেশন, ক্যামেরা এবং পরিচিতি সংক্রান্ত অনুমতি) মঞ্জুর করার জন্য /system/priv-app/ বা /product/priv-app/ ফোল্ডারে থাকতে হবে। IMS ইমপ্লিমেন্টেশনের প্যাকেজের নাম CarrierConfig বা উপরে উল্লেখ করা ডিভাইস ওভারলে ভ্যালুর সাথে ম্যাচ করছে কিনা তা যাচাই করে, শুধুমাত্র বিশ্বাসযোগ্য, প্রি-ইনস্টল করা অ্যাপই বাউন্ড করা হয়।

কাস্টমাইজেশন

ImsService প্রয়োগ করা অ্যাপ শুধুমাত্র সেইসব ডিভাইসে সীমাবদ্ধ থাকে যেখানে সেগুলি ক্যারিয়ার "ওভাররাইড" ImsService বা ডিভাইস "ডিফল্ট" ImsService কনফিগারেশন হিসেবে MMTEL বা RCS ফাংশনালিটির জন্য কনফিগার করা হয়। এছাড়াও, ImsService, ImsService#onUpdateSupportedImsFeatures পদ্ধতি ব্যবহার করে আপডেট করার মাধ্যমে, এটির দ্বারা সমর্থিত IMS ফিচার (MMTEL এবং RCS) ডায়নামিকভাবে চালু বা বন্ধ করার অনুমতি দেয়। এটি ফ্রেমওয়ার্ককে ট্রিগার করে যাতে কোন ImsServices বাউন্ড এবং কোন ফিচার তারা সাপোর্ট করে তা আবার গণনা করা যায়। IMS অ্যাপ যদি কোনও ফিচার কাজ করে না এমন ফ্রেমওয়ার্ক আপডেট করে, তাহলে ফোন রিবুট না করা পর্যন্ত বা IMS অ্যাপের সাথে ম্যাচ করে এমন নতুন সিম কার্ড না ঢোকানো পর্যন্ত ImsService আনবাউন্ড হয়ে যাবে।

একাধিক ImsService-এর জন্য বাইন্ডিং সংক্রান্ত অগ্রাধিকার

ফ্রেমওয়ার্কটি ডিভাইসে আগে থেকে লোড করা সব সম্ভাব্য ImsServices-এর সাথে বাইন্ডিং সাপোর্ট করে না এবং প্রতি সিম স্লটে সর্বাধিক দুটি ImsServices-এর সাথে বাইন্ড করবে (প্রতিটি ফিচারের জন্য একটি ImsService) ফিচার-ভিত্তিক নিম্নলিখিত ক্রমে:

  1. সিম কার্ড ঢোকানো থাকলে, CarrierConfig ভ্যালু config_ims_[mmtel/rcs]_package_override_string দ্বারা নির্ধারিত ImsService প্যাকেজের নাম।
  2. ডিভাইস ওভারলে ভ্যালুতে ImsService প্যাকেজের নাম সংজ্ঞায়িত করা আছে config_ims_[mmtel/rcs]_packageএর মধ্যে সিম কার্ড না ঢোকানো অবস্থাও অন্তর্ভুক্ত। এই ImsService-কে অবশ্যই জরুরি MmTel ফিচারের সাথে কাজ করতে হবে।

যেসব পরিষেবা এই প্যাকেজ ব্যবহার করবে, সেগুলির প্রত্যেকটির জন্য CarrierConfig-এ আপনার ImsService-এর প্যাকেজের নাম অবশ্যই উল্লেখ করতে হবে অথবা আপনার ImsService ডিফল্ট হলে, উপরে যেভাবে উল্লেখ করা হয়েছে সেইভাবে ডিভাইস ওভারলেতে উল্লেখ করতে হবে।

আসুন, প্রতিটি ফিচারের জন্য এটি ভেঙে দেখা যাক। একটি সিম কার্ড লোড করা আছে এমন ডিভাইসের (সিঙ্গেল বা মাল্টি-সিম) জন্য, দুটি IMS ফিচার সম্ভব: MMTel এবং RCS. প্রতিটি ফিচারের জন্য উপরে যেভাবে ক্রম নির্ধারণ করা হয়েছে, ফ্রেমওয়ার্ক সেইভাবে বাইন্ড করার চেষ্টা করবে এবং ক্যারিয়ার কনফিগারেশন ওভাররাইডে উল্লিখিত ImsService-এর জন্য ফিচার উপলভ্য না থাকলে, ফ্রেমওয়ার্ক আপনার ডিফল্ট ImsService-এ ফলব্যাক করবে। যেমন, নিচে দেওয়া সারণীতে বর্ণনা করা হয়েছে যে, ফ্রেমওয়ার্ক কোন IMS ফিচার ব্যবহার করবে যদি তিনটি IMS অ্যাপ ImsServices প্রয়োগ করে এবং নিম্নলিখিত ফিচার সহ কোনও সিস্টেমে ইনস্টল করা থাকে:

  • পরিষেবা প্রদানকারী A-এর ImsService-এ RCS কাজ করে
  • পরিষেবা প্রদানকারী B ImsService-এ RCS ও MMTel কাজ করে
  • OEM ImsService RCS ও MMTel-এ কাজ করে
সিম কার্ড যোগ করা হয়েছে RCS ফিচার MMTel ফিচার
পরিষেবা প্রদানকারী ক পরিষেবা প্রদানকারী 'ক' OEM
পরিষেবা প্রদানকারী 'খ' পরিষেবা প্রদানকারী 'খ' পরিষেবা প্রদানকারী 'খ'
কোনও সিম নেই OEM OEM

যাচাইকরণ

IMS প্রয়োগ যাচাই করার টুল অন্তর্ভুক্ত করা হয়নি, কারণ IMS স্পেসিফিকেশন অত্যন্ত বড় এবং বিশেষ যাচাইকরণ সরঞ্জাম ব্যবহার করে। পরীক্ষা শুধুমাত্র এটি যাচাই করতে পারে যে টেলিফোনি ফ্রেমওয়ার্ক ImsService API-কে সঠিকভাবে উত্তর দেয় কিনা।

IMS অ্যাপ ডেভেলপ করা

Android টেলিফোনি স্ট্যাকের সাথে ইন্টারফেস করে এমন IMS অ্যাপ ডেভেলপ করার সময়, আমরা সাজেস্ট করি যে অ্যাপটি নির্দিষ্ট ক্যারিয়ার সাবস্ক্রিপশনের সাথে অ্যাটাচ করা ImsService ইনস্ট্যান্সের স্ট্যাটাস শুনতে বা পরিবর্তন করতে পারে কিনা তা উল্লেখ করুন।

MMTEL ও RCS ফিচারের জন্য ImsService-এর স্টেট শুনতে বা পরিবর্তন করতে, ImsManager ক্লাস ব্যবহার করে ImsMmTelManager, ImsRcsManager, বা IMS-নির্দিষ্ট ProvisioningManager ক্লাসের ইনস্ট্যান্স পান। তারপরে অ্যাপটি IMS-নির্দিষ্ট পরিষেবা এবং প্রভিশনিং স্টেট শুনতে পারে যেমন:

  • চালু ও উপলভ্য MMTEL বা RCS ফিচার
  • IMS রেজিস্ট্রেশন স্ট্যাটাস পরিবর্তন হলে আপডেট
  • IMS ফিচারের প্রভিশনিং স্ট্যাটাস
  • ব্যবহারকারী যেসব IMS ফিচার চালু করেছেন

ImsStateCallback ব্যবহার করুন

ImsService একটি স্থায়ীভাবে বাউন্ড পরিষেবা হলেও, নতুন সিম কার্ড বা এম্বেড করা সাবস্ক্রিপশন অ্যাক্টিভ হলে অথবা পরিষেবা প্রদানকারীর কনফিগারেশন পরিবর্তন হলে, বাউন্ড পরিষেবাটি পরিবর্তিত হতে পারে। ImsService টেলিফোনি প্রসেসের অংশ না হওয়ায়, কোনও সাবস্ক্রিপশন বা কনফিগারেশনে পরিবর্তনের কারণে ImsService অদৃশ্যভাবে ক্র্যাশ করলে বা আনবাউন্ড হয়ে গেলে, IMS API অ্যাক্সেস করার সময় কোনও অ্যাপ অপ্রত্যাশিত ব্যতিক্রমের সম্মুখীন হতে পারে।

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-সম্পর্কিত API সাবস্ক্রিপশনের জন্য উপলভ্য নয়।

টেলিফোনি প্রসেস ক্র্যাশ করার মতো বিরল ঘটনা ঘটলে, অ্যাপ ImsStateCallback#onError পায় এবং রেজিস্টার করা ImsStateCallback ইনস্ট্যান্সের ব্যাপারে আর কোনও আপডেট পায় না। এই অবস্থা থেকে বেরিয়ে আসতে, ImsMmTelManager#registerImsStateCallback অথবা ImsRcsManager#registerImsStateCallback-এ কল করে সংশ্লিষ্ট সাবস্ক্রিপশনের জন্য ImsStateCallback ইনস্ট্যান্স আবার রেজিস্টার করুন।