IMS প্রয়োগ করুন

অ্যান্ড্রয়েড ৯-এ আইএমএসসার্ভিস (ImsService) নামে একটি সিস্টেমএপিআই (SystemApi) ইন্টারফেস চালু করা হয়েছে, যা আপনাকে আইপি মাল্টিমিডিয়া সাবসিস্টেম (IMS) বাস্তবায়নে সাহায্য করে। আইএমএসসার্ভিস এপিআই (ImsService API) হলো অ্যান্ড্রয়েড প্ল্যাটফর্ম এবং কোনো ভেন্ডর বা ক্যারিয়ার-প্রদত্ত আইএমএস বাস্তবায়নের মধ্যে একটি সু-সংজ্ঞায়িত ইন্টারফেস।

ImsService ওভারভিউ

চিত্র ১. ImsService-এর সংক্ষিপ্ত বিবরণ

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

উদাহরণ এবং উৎস

অ্যান্ড্রয়েড AOSP-তে একটি অ্যাপ প্রদান করে যা পরীক্ষা এবং উন্নয়নের উদ্দেশ্যে ImsService API-এর অংশবিশেষ বাস্তবায়ন করে। আপনি অ্যাপটি /testapps/ImsTestService -এ খুঁজে পাবেন।

আপনি ImsService API-এর ডকুমেন্টেশন ImsService- এ এবং API-এর অন্যান্য ক্লাসগুলোতে খুঁজে পাবেন।

বাস্তবায়ন

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

পুরানো IMS বাস্তবায়নগুলির সাথে সামঞ্জস্যতা

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

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

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

ফ্রেমওয়ার্কের সাথে ImsService নিবন্ধন

ImsService API-টি একটি সার্ভিস হিসেবে প্রয়োগ করা হয়, যা অ্যান্ড্রয়েড ফ্রেমওয়ার্ক IMS ইমপ্লিমেন্টেশনের সাথে যোগাযোগের জন্য বাইন্ড করে। ফ্রেমওয়ার্কের সাথে 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>

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

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

ফিচার_এমএমটিইএল

ImsService IMS MMTEL ফিচারটি ইমপ্লিমেন্ট করে, যা জরুরি কলের জন্য IMS PDN-এ ইমার্জেন্সি অ্যাটাচ ছাড়া সমস্ত IMS মিডিয়ার (IR.92 এবং IR.94 স্পেসিফিকেশন) সাপোর্ট প্রদান করে। ImsService এর যে কোনো ইমপ্লিমেন্টেশন যা MMTEL ফিচারগুলো সাপোর্ট করতে চায়, তাদের android.telephony.ims.MmTelFeature বেস ক্লাসটি এক্সটেন্ড করতে হবে এবং ImsService#createMmTelFeature এ একটি কাস্টম MmTelFeature ইমপ্লিমেন্টেশন রিটার্ন করতে হবে।

ফিচার_ইমার্জেন্সি_এমএমটিইএল

এই ফিচারটি ডিক্লেয়ার করলে প্ল্যাটফর্মকে শুধু এই সংকেতই দেওয়া হয় যে, জরুরি পরিষেবার জন্য IMS PDN-এর সাথে ইমার্জেন্সি অ্যাটাচ করা সম্ভব। যদি আপনার ImsService জন্য এই ফিচারটি ডিক্লেয়ার করা না থাকে, তাহলে প্ল্যাটফর্ম জরুরি পরিষেবার জন্য ডিফল্ট হিসেবে সবসময় সার্কিট সুইচ ফলব্যাক ব্যবহার করবে। এই ফিচারটি ডিফাইন করার জন্য FEATURE_MMTEL ফিচারটি অবশ্যই ডিফাইন করা থাকতে হবে।

ফিচার_আরসিএস

ImsService API কোনো IMS RCS ফিচার ইমপ্লিমেন্ট করে না, কিন্তু android.telephony.ims.RcsFeature বেস ক্লাসটি এখনও কার্যকর হতে পারে। যখন ফ্রেমওয়ার্কটি শনাক্ত করে যে প্যাকেজটির RCS প্রদান করা উচিত, তখন এটি স্বয়ংক্রিয়ভাবে ImsService-এর সাথে বাইন্ড করে এবং ImsService#createRcsFeature কল করে। যদি RCS সার্ভিসের সাথে যুক্ত সিম কার্ডটি সরিয়ে ফেলা হয়, তাহলে ফ্রেমওয়ার্ক স্বয়ংক্রিয়ভাবে RcsFeature#onFeatureRemoved কল করে এবং তারপর RCS ফিচারের সাথে যুক্ত ImsService ক্লিন আপ করে। এই কার্যকারিতাটি কিছু কাস্টম ডিটেকশন বা বাইন্ডিং লজিক দূর করতে পারে, যা অন্যথায় একটি RCS ফিচারকে প্রদান করতে হতো।

সমর্থিত বৈশিষ্ট্যগুলির নিবন্ধন

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

ImsService প্রারম্ভিককরণ এবং বাইন্ডিং

চিত্র ২. ImsService প্রারম্ভিককরণ এবং বাইন্ডিং

একটি ImsService বাস্তবায়নের ফ্রেমওয়ার্ক সনাক্তকরণ এবং যাচাইকরণ

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

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

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

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

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

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

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

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

যেসব ক্যারিয়ার আপনার ImsService-টি ব্যবহার করবে, তাদের প্রত্যেকের CarrierConfig-এ অথবা, উপরে বর্ণিত নিয়ম অনুযায়ী আপনার ImsService-টি যদি ডিফল্ট হয়, তবে ডিভাইস ওভারলে-তে অবশ্যই সেটির প্যাকেজ নামটি সংজ্ঞায়িত থাকতে হবে।

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

  • ক্যারিয়ার এ আইএমএসসার্ভিস আরসিএস সমর্থন করে
  • ক্যারিয়ার বি আইএমএসসার্ভিস আরসিএস এবং এমএমটেল সমর্থন করে।
  • OEM ImsService, RCS এবং MMTel-কে সমর্থন করে।
সিম কার্ড ঢোকানো হয়েছে আরসিএস বৈশিষ্ট্য এমএমটেল বৈশিষ্ট্য
বাহক এ বাহক এ OEM
বাহক বি বাহক বি বাহক বি
কোন সিম নেই OEM OEM

বৈধতা

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

একটি IMS অ্যাপ তৈরি করুন

অ্যান্ড্রয়েড টেলিফোনি স্ট্যাকের সাথে ইন্টারফেস করে এমন একটি IMS অ্যাপ তৈরি করার সময়, আমরা সুপারিশ করি যে অ্যাপটি যেন একটি নির্দিষ্ট ক্যারিয়ার সাবস্ক্রিপশনের জন্য সংযুক্ত ImsService ইনস্ট্যান্সের অবস্থা শুনতে বা পরিবর্তন করতে পারে, তা নির্দিষ্ট করে দেওয়া হয়।

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

  • MMTEL বা RCS-এর যে বৈশিষ্ট্যগুলি সক্রিয় এবং উপলব্ধ
  • IMS নিবন্ধনের অবস্থা পরিবর্তিত হলে আপডেট হয়।
  • আইএমএস বৈশিষ্ট্যগুলির প্রোভিশনিং স্থিতি
  • ব্যবহারকারী IMS বৈশিষ্ট্যগুলি সক্রিয় করেছেন

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

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

Android 13 বা তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে, কোনো সংশ্লিষ্ট সাবস্ক্রিপশনের জন্য ImsService ইনস্ট্যান্সটি উপলব্ধ আছে কি নেই তা নিরীক্ষণ করতে, একটি অ্যাপ ImsStateCallback ক্লাসটি ব্যবহার করতে পারে। ImsMmTelManager বা ImsRcsManager এর একটি ইনস্ট্যান্স নেওয়ার সময়, আমরা সুপারিশ করি যে অ্যাপটি প্রথমে ImsMmTelManager#registerImsStateCallback বা ImsRcsManager#registerImsStateCallback ব্যবহার করে একটি IMS স্টেট কলব্যাকের জন্য রেজিস্টার করুক। ImsService আবার উপলব্ধ হলে নির্দিষ্ট সাবস্ক্রিপশনগুলির জন্য কলব্যাক আপডেট পেতে থাকার জন্য, অ্যাপটিকে অবশ্যই ImsMmTelManager , ImsRcsManager , বা ProvisioningManager মাধ্যমে রেজিস্টার করা বিদ্যমান কলব্যাকগুলি অনিবন্ধিত বা বাতিল করতে হবে এবং নতুন কলব্যাক রেজিস্টার করতে হবে।

যদি কোনো সাবস্ক্রিপশন IMS সাপোর্ট না করে, তাহলে ফ্রেমওয়ার্কটি REASON_NO_IMS_SERVICE_CONFIGURED কারণসহ ImsStateCallback#onUnavailable কল করে। এর মানে হলো, সেই সাবস্ক্রিপশনের জন্য ImsService এবং IMS-সম্পর্কিত API-গুলো উপলব্ধ নয়।

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