অ্যান্ড্রয়েড ৬.০ এবং এর পরবর্তী সংস্করণগুলোতে বিশেষ সুবিধাপ্রাপ্ত অ্যাপগুলোর জন্য প্ল্যাটফর্মে ক্যারিয়ার-নির্দিষ্ট কনফিগারেশন সরবরাহ করার একটি সক্ষমতা অন্তর্ভুক্ত রয়েছে। অ্যান্ড্রয়েড ৫.১ (ললিপপ এমআর১)-এ প্রবর্তিত UICC ক্যারিয়ার প্রিভিলেজের উপর ভিত্তি করে তৈরি এই কার্যকারিতাটি, ক্যারিয়ার কনফিগারেশনকে স্ট্যাটিক কনফিগারেশন ওভারলে থেকে সরিয়ে আনতে সাহায্য করে এবং ক্যারিয়ার ও OEM-দের একটি নির্দিষ্ট ইন্টারফেসের মাধ্যমে প্ল্যাটফর্মে ডায়নামিকভাবে ক্যারিয়ার কনফিগারেশন সরবরাহ করার ক্ষমতা দেয়।
একটি যথাযথভাবে স্বাক্ষরিত ক্যারিয়ার অ্যাপ সিস্টেম ইমেজে আগে থেকেই লোড করা থাকতে পারে, স্বয়ংক্রিয়ভাবে ইনস্টল হতে পারে, অথবা অ্যাপ স্টোরের মাধ্যমে ম্যানুয়ালি ইনস্টল করা যেতে পারে। প্ল্যাটফর্মটি এই অ্যাপটিকে বিভিন্ন সেটিংসের কনফিগারেশন প্রদানের জন্য জিজ্ঞাসা করে, যার মধ্যে অন্তর্ভুক্ত থাকে:
- রোমিং/ননরোমিং নেটওয়ার্ক
- ভিজ্যুয়াল ভয়েসমেইল
- এসএমএস/এমএমএস নেটওয়ার্ক সেটিংস
- VoLTE/IMS কনফিগারেশন
কী কী মান ফেরত দেওয়া হবে, সেই সিদ্ধান্ত সম্পূর্ণভাবে ক্যারিয়ার অ্যাপের উপর নির্ভর করে এবং প্ল্যাটফর্মের মাধ্যমে অ্যাপে পাঠানো বিস্তারিত তথ্যের ভিত্তিতে এটি পরিবর্তনশীল হতে পারে।
এই পদ্ধতির প্রধান সুবিধাগুলো হলো:
- ডাইনামিক কনফিগারেশন - নন-এমসিসিএমএনসি থেকে উদ্ভূত কনফিগারেশনের মতো ধারণাগুলির জন্য সমর্থন, উদাহরণস্বরূপ, মোবাইল ভার্চুয়াল নেটওয়ার্ক অপারেটর (এমভিএনও) বা গ্রাহকের অতিরিক্ত পরিষেবা বেছে নেওয়ার সুযোগ।
- যেকোনো মাধ্যমে বিক্রি হওয়া ডিভাইসের জন্য সমর্থন - উদাহরণস্বরূপ, একটি অ্যাপ স্টোর থেকে অ্যাপ ডাউনলোড করার মাধ্যমে উন্মুক্ত বাজারের একটি ফোনকে সঠিক সেটিংস দিয়ে স্বয়ংক্রিয়ভাবে কনফিগার করা যেতে পারে।
- নিরাপত্তা - এই কনফিগারেশন প্রদান করার অধিকার শুধুমাত্র ক্যারিয়ার কর্তৃক স্বাক্ষরিত অ্যাপগুলোকেই দেওয়া হয়।
- সুসংজ্ঞায়িত এপিআই - পূর্বে এই কনফিগারেশনটি কোনো পাবলিক এপিআই-এর মাধ্যমে নয়, বরং ফ্রেমওয়ার্কের অভ্যন্তরীণ এক্সএমএল ওভারলে-তে সংরক্ষিত থাকত। অ্যান্ড্রয়েড ৬.০-এর ক্যারিয়ার কনফিগ এপিআইটি পাবলিক এবং সুসংজ্ঞায়িত।
এটি কীভাবে কাজ করে
কনফিগারেশন লোড করুন
এই বৈশিষ্ট্য দ্বারা সরবরাহকৃত ক্যারিয়ার কনফিগারেশন হলো একগুচ্ছ কী-ভ্যালু পেয়ার, যা প্ল্যাটফর্মের বিভিন্ন টেলিফোনি-সম্পর্কিত আচরণ পরিবর্তন করে।
একটি নির্দিষ্ট ডিভাইসের জন্য মানসমূহের সেট নিম্নলিখিত উপাদানগুলিকে ক্রমানুসারে কোয়েরি করার মাধ্যমে নির্ধারণ করা হয়:
- ক্যারিয়ার অ্যাপ (এটি ঐচ্ছিক, তবে অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্ট (AOSP)-এ যা আছে তার বাইরে অতিরিক্ত কনফিগারেশনের জন্য এটিই প্রস্তাবিত স্থান)
- সিস্টেম ইমেজের সাথে বান্ডেল করা প্ল্যাটফর্ম কনফিগারেশন অ্যাপ
- ডিফল্ট মান, যা ফ্রেমওয়ার্কে হার্ডকোড করা আছে (অ্যান্ড্রয়েড ৬.০-এর পূর্ববর্তী আচরণের সমতুল্য)
প্ল্যাটফর্ম কনফিগারেশন অ্যাপ
সিস্টেম ইমেজের সাথে একটি জেনেরিক প্ল্যাটফর্ম কনফিগারেশন অ্যাপ বান্ডেল করা থাকে। এই অ্যাপটি এমন যেকোনো ভেরিয়েবলের জন্য মান সরবরাহ করতে পারে যা সাধারণ ক্যারিয়ার অ্যাপ পারে না। প্ল্যাটফর্ম কনফিগারেশন অ্যাপটি (অ্যান্ড্রয়েড ৬.০-তে) packages/apps/CarrierConfig এ পাওয়া যাবে।
এই অ্যাপটির উদ্দেশ্য হলো, যখন কোনো ক্যারিয়ার অ্যাপ ইনস্টল করা থাকে না, তখন নেটওয়ার্ক-ভিত্তিক কিছু কনফিগারেশন প্রদান করা। ক্যারিয়ার/ওইএম-দের উচিত তাদের নিজস্ব ইমেজে এতে শুধুমাত্র ন্যূনতম পরিবর্তন করা। এর পরিবর্তে, ক্যারিয়ারদের উচিত ক্যারিয়ার কাস্টমাইজেশনের জন্য একটি পৃথক ক্যারিয়ার অ্যাপ সরবরাহ করা, যা অ্যাপ স্টোরের মতো মাধ্যমে আপডেট বিতরণের সুযোগ দেবে।
একটি ক্যারিয়ার অ্যাপকে কীভাবে বিশেষাধিকার দেওয়া হয়
UICC ক্যারিয়ার প্রিভিলেজেস -এ নথিভুক্ত নিয়ম অনুযায়ী, সংশ্লিষ্ট ক্যারিয়ার অ্যাপটিকে অবশ্যই সিম কার্ডে থাকা একই সার্টিফিকেট দিয়ে স্বাক্ষরিত হতে হবে।
ক্যারিয়ার অ্যাপে কী তথ্য পাঠানো হয়
ক্যারিয়ার অ্যাপটিকে নিম্নলিখিত মানগুলি সরবরাহ করা হয়, যা এটিকে কী মান ফেরত দিতে হবে সে সম্পর্কে একটি গতিশীল সিদ্ধান্ত নিতে সক্ষম করে:
- এমসিসি
- এমএনসি
- এসপিএন
- আইএমএসআই
- জিআইডি১
- জিআইডি২
- ক্যারিয়ার আইডি
ক্যারিয়ার আইডি ইন্টিগ্রেট করার বিষয়ে আরও তথ্যের জন্য, “CarrierConfig-এর সাথে ক্যারিয়ার আইডি ইন্টিগ্রেট করা” দেখুন।
ক্যারিয়ার কনফিগারেশন লোড করার সময়
কী-ভ্যালু জোড়গুলোর তালিকা তৈরির প্রক্রিয়াটি নিম্নরূপ:
- যখন সিম লোড করা হয় (বুট করার সময়, বা সিম হট সোয়াপ করার সময়)
- যখন ক্যারিয়ার অ্যাপ ম্যানুয়ালি রিলোড শুরু করে
- যখন ক্যারিয়ার অ্যাপটি আপডেট হয়
আরও বিস্তারিত তথ্যের জন্য android.service.carrier.CarrierService#onLoadConfig() রেফারেন্সটি দেখুন।
কনফিগারেশন ব্যবহার করুন
যখন কনফিগারেশনটি তৈরি করা হয়, তখন এর মধ্যে থাকা মানগুলি সিস্টেম কনফিগারেশনের বিভিন্ন মান নির্ধারণ করতে ব্যবহৃত হয়, যার মধ্যে অন্তর্ভুক্ত রয়েছে:
- অভ্যন্তরীণ ফ্রেমওয়ার্ক টেলিফোনি সেটিংস
- SDK থেকে প্রাপ্ত কনফিগারেশন মান, উদাহরণস্বরূপ, SmsManager-এ
- ডায়ালারে VVM সংযোগের মানের মতো অ্যাপ সেটিংস
কনফিগারেশন কী
কী-গুলির তালিকা android.telephony.CarrierConfigManager এ পাবলিক SDK-এর অংশ হিসেবে সংজ্ঞায়িত করা আছে এবং একই API লেভেলের মধ্যে এটি পরিবর্তন করা যায় না। কী-গুলির সারসংক্ষেপের জন্য নিচের সারণিটি দেখুন।
অ্যাপটি তৈরি করুন
অ্যাপটি তৈরি করুন
আপনার অ্যাপটিকে অবশ্যই Android 6.0 API লেভেল (23) টার্গেট করতে হবে।
এমন একটি ক্লাস ঘোষণা করুন যা android.service.carrier.CarrierService-কে ওভাররাইড করে।
- প্রদত্ত
service.carrier.CarrierIdentifierঅবজেক্টের উপর ভিত্তি করে আপনার পছন্দসই মানগুলো ফেরত দেওয়ার জন্যonLoadConfigওভাররাইড করুন। - এমন পরিস্থিতিতে
notifyConfigChangedForSubIdকল করার জন্য লজিক যোগ করুন, যেখানে সময়ের সাথে সাথে ক্যারিয়ার কনফিগারেশন পরিবর্তিত হতে পারে (উদাহরণস্বরূপ, যখন ব্যবহারকারী তার অ্যাকাউন্টে অতিরিক্ত পরিষেবা যোগ করেন)।
নীচে একটি উদাহরণ দেওয়া হল:
public class SampleCarrierConfigService extends CarrierService { private static final String TAG = "SampleCarrierConfigService"; public SampleCarrierConfigService() { Log.d(TAG, "Service created"); } @Override public PersistableBundle onLoadConfig(CarrierIdentifier id) { Log.d(TAG, "Config being fetched"); PersistableBundle config = new PersistableBundle(); config.putBoolean( CarrierConfigManager.KEY_CARRIER_VOLTE_AVAILABLE_BOOL, true); config.putBoolean( CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL, false); config.putInt(CarrierConfigManager.KEY_VOLTE_REPLACEMENT_RAT_INT, 6); // Check CarrierIdentifier and add more config if needed… return config; } }
আরও বিস্তারিত তথ্যের জন্য android.service.carrier.CarrierService রেফারেন্সটি দেখুন।
ম্যানিফেস্টে ক্লাসটির নাম উল্লেখ করুন।
নীচে একটি উদাহরণ দেওয়া হল:
<service android:name=".SampleCarrierConfigService"
android:label="@string/service_name"
android:permission="android.permission.BIND_CARRIER_SERVICES">
<intent-filter>
<action android:name="android.service.carrier.CarrierService"/></intent-filter>
</service>সিমে থাকা একই সার্টিফিকেট দিয়ে অ্যাপটি সাইন করুন।
প্রয়োজনীয়তাগুলোর জন্য UICC ক্যারিয়ার প্রিভিলেজ দেখুন।
ক্যারিয়ার অ্যাপের মাধ্যমে APN যোগ করুন
ক্যারিয়ার অ্যাপ থেকে প্রোগ্রাম্যাটিকভাবে APN যোগ করতে (উদাহরণস্বরূপ, সিম অ্যাক্টিভেশনের সময়), android.provider.Telephony.Carriers.CONTENT_URI URI দ্বারা চিহ্নিত একটি কন্টেন্ট প্রোভাইডারে APN আইটেম যোগ করার জন্য ContentResolver API ব্যবহার করুন। কন্টেন্ট URI-এর টেবিল কাঠামো সম্পর্কে আরও তথ্যের জন্য, Telephony.Carriers দেখুন।
আরও তথ্যের জন্য, APN এবং CarrierConfig দেখুন।
অ্যাপটি পরীক্ষা করুন
আপনার কনফিগারেশন অ্যাপটি তৈরি হয়ে গেলে, আপনি নিম্নলিখিত উপায়ে আপনার কোড পরীক্ষা করতে পারেন:
- একটি বৈধ সার্টিফিকেট স্বাক্ষরযুক্ত সিম
- অ্যান্ড্রয়েড ৬.০ বা তার পরবর্তী সংস্করণে চালিত একটি ডিভাইস, উদাহরণস্বরূপ একটি অ্যান্ড্রয়েড ডিভাইস
ক্যারিয়ার পরিষেবা সক্ষমতা সেট করুন
অ্যান্ড্রয়েডে, ক্যারিয়ার সার্ভিস ক্যাপাবিলিটিজ বর্ণনা করে যে কোনো ডিভাইসে ভয়েস, মেসেজিং এবং ডেটা পরিষেবা সমর্থিত কিনা। ক্যারিয়ারগুলো ডিভাইস লেভেলে এবং সাবস্ক্রিপশন লেভেলে (অ্যান্ড্রয়েড ১৫ বা তার বেশি) একটি ডিভাইসের জন্য ক্যারিয়ার সার্ভিস ক্যাপাবিলিটিজ নির্দিষ্ট করতে পারে।
ডিভাইস-স্তরের পরিষেবা সক্ষমতা
ডিভাইস-স্তরের পরিষেবা সক্ষমতাগুলি ডিভাইসটি তৈরি করার সময় কনফিগার করা হয় (তৈরির পরে পরিবর্তন করা যায় না)। ক্যারিয়ারগুলি নিম্নলিখিত সিস্টেম রিসোর্স ওভাররাইডগুলির মাধ্যমে ডিভাইস-স্তরের সক্ষমতাগুলি নির্দিষ্ট করতে পারে:
অ্যাপগুলি নিম্নলিখিত API-গুলির মাধ্যমে ডিভাইস-স্তরের পরিষেবা সক্ষমতা সম্পর্কে জানতে পারে:
সাবস্ক্রিপশন-স্তরের পরিষেবা সক্ষমতা
অ্যান্ড্রয়েড ১৫ বা তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলির জন্য, ক্যারিয়ারগুলি সাবস্ক্রিপশন স্তরে ডিভাইসের পরিষেবা সক্ষমতা নির্দিষ্ট করতে পারে। সাবস্ক্রিপশন-স্তরের পরিষেবা সক্ষমতা নির্দিষ্ট করতে, CarrierConfigManager.KEY_CELLULAR_SERVICE_CAPABILITIES_INT_ARRAY API ব্যবহার করুন। উদাহরণস্বরূপ, একটি সাবস্ক্রিপশন শুধুমাত্র ডেটার জন্য নির্দিষ্ট করতে, মানটি SubscriptionManager#SERVICE_CAPABILITY_DATA তে সেট করুন।
অ্যাপগুলো (প্রি-লোডেড সিস্টেম অ্যাপ এবং থার্ড-পার্টি অ্যাপ) SubscriptionInfo.getServiceCapabilities() মেথডের মাধ্যমে একটি নির্দিষ্ট সাবস্ক্রিপশনের জন্য ক্যারিয়ার সার্ভিসের সক্ষমতা সম্পর্কে জানতে পারে। এর ফলে অ্যাপ ডেভেলপাররা সাবস্ক্রিপশনের জন্য উপলব্ধ সক্ষমতার উপর ভিত্তি করে অ্যাপের ইউজার এক্সপেরিয়েন্স কাস্টমাইজ করতে পারেন। উদাহরণস্বরূপ, অ্যাপ ডেভেলপাররা নিশ্চিত করতে পারেন যে, ব্যবহারকারী যদি শুধুমাত্র ডেটা-ভিত্তিক সাবস্ক্রিপশনে থাকেন, তবে ডায়ালার অ্যাপটি তাকে কল করতে দেবে না।
অপ্রচলিত পরিষেবা ক্ষমতা এপিআই
অ্যান্ড্রয়েড ১৫ থেকে, অ্যান্ড্রয়েড ডিভাইস-স্তর এবং সাবস্ক্রিপশন-স্তর উভয় প্রকার পরিষেবা সক্ষমতা প্রদান করে। এই পরিবর্তনের কারণে, আরও ভালো পাঠযোগ্যতার জন্য বিদ্যমান ডিভাইস-স্তরের সক্ষমতা API-গুলোর নাম পরিবর্তন করা হয়েছে। নিম্নলিখিত সারণিতে অ্যান্ড্রয়েড ১৫-এ প্রবর্তিত বাতিলকৃত API এবং নাম পরিবর্তনকৃত API-গুলোর তালিকা দেওয়া হলো:
| অপ্রচলিত (অ্যান্ড্রয়েড ১৪ বা তার নিম্নতর সংস্করণ) | সমতুল্য (অ্যান্ড্রয়েড ১৫ বা উচ্চতর) |
|---|---|
TelephonyManager.isVoiceCapable() | TelephonyManager.isDeviceVoiceCapable() |
TelephonyManager.isSmsCapable() | TelephonyManager.isDeviceSmsCapable() |