ক্যারিয়ার কনফিগারেশন

Android 6.0 ও তার পরবর্তী যেকোনও ভার্সনে, বিশেষ সুবিধা প্রাপ্ত অ্যাপের মাধ্যমে প্ল্যাটফর্মে ক্যারিয়ার-নির্দিষ্ট কনফিগারেশন প্রদান করার সুবিধা অন্তর্ভুক্ত থাকে। Android 5.1 (Lollipop MR1)-এ চালু করা UICC ক্যারিয়ার প্রিভিলেজ ফিচারের উপর ভিত্তি করে এই কার্যকারিতা, ক্যারিয়ার কনফিগারেশনকে স্ট্যাটিক কনফিগারেশন ওভারলে থেকে সরিয়ে দেয় এবং ক্যারিয়ার ও OEM-কে একটি নির্দিষ্ট ইন্টারফেসের মাধ্যমে প্ল্যাটফর্মে ডায়নামিক ক্যারিয়ার কনফিগারেশন প্রদান করার ক্ষমতা দেয়।

সঠিকভাবে সাইন করা কোনও ক্যারিয়ার অ্যাপ সিস্টেম ইমেজে প্রি-লোড করা, অটোমেটিক ইনস্টল করা অথবা অ্যাপ স্টোরের মাধ্যমে ম্যানুয়ালি ইনস্টল করা হতে পারে। অ্যাপটি প্ল্যাটফর্ম দ্বারা কোয়েরি করা হয় যাতে সেটিংসের জন্য কনফিগারেশন প্রদান করা যায় যার মধ্যে রয়েছে:

  • রোমিং/নন-রোমিং নেটওয়ার্ক
  • ভিজুয়াল ভয়েসমেল
  • এসএমএস/এমএমএস নেটওয়ার্ক সেটিংস
  • VoLTE/IMS কনফিগারেশন

কোন কোন ভ্যালু রিটার্ন করতে হবে তা সম্পূর্ণভাবে ক্যারিয়ার অ্যাপের উপর নির্ভর করে এবং প্ল্যাটফর্মের মাধ্যমে অ্যাপে পাঠানো বিস্তারিত তথ্যের উপর ভিত্তি করে ডায়নামিক হতে পারে।

এই পদ্ধতির মূল সুবিধাগুলি হল:

  • ডায়নামিক কনফিগারেশন - নন-MCCMNC থেকে প্রাপ্ত কনফিগারেশনের মতো ধারণার জন্য সহায়তা, যেমন, মোবাইল ভার্চুয়াল নেটওয়ার্ক অপারেটর (MVNO) বা অতিরিক্ত পরিষেবার জন্য গ্রাহকের অপ্ট-ইন করা।
  • যেকোনও চ্যানেলের মাধ্যমে বিক্রি হওয়া ডিভাইসের জন্য সহায়তা - যেমন, অ্যাপ স্টোর থেকে অ্যাপ ডাউনলোড করে সঠিক সেটিংসের মাধ্যমে ওপেন মার্কেট ফোন অটোমেটিক কনফিগার করা যেতে পারে।
  • নিরাপত্তা - এই কনফিগারেশন প্রদান করার বিশেষ অধিকার শুধুমাত্র ক্যারিয়ারের দ্বারা সাইন-ইন করা অ্যাপগুলিকে দেওয়া হয়।
  • সংজ্ঞায়িত API - আগে এই কনফিগারেশন বেশিরভাগ ক্ষেত্রে ফ্রেমওয়ার্কের মধ্যে ইন্টার্নাল XML ওভারলেতে স্টোর করা হত, পাবলিক API-এর মাধ্যমে নয়। Android 6.0-এ পরিষেবা প্রদানকারীর কনফিগারেশন API সর্বজনীন এবং সুনির্দিষ্ট।

এটি কীভাবে কাজ করে

কনফিগারেশন লোড করুন

এই ফিচারের মাধ্যমে প্রদান করা ক্যারিয়ার কনফিগারেশন হল কী-ভ্যালু পেয়ারের একটি সেট যা প্ল্যাটফর্মে টেলিফোনি সম্পর্কিত বিভিন্ন আচরণ পরিবর্তন করে।

কোনও নির্দিষ্ট ডিভাইসের জন্য ভ্যালুর সেট নিম্নলিখিত কম্পোনেন্টগুলি এই ক্রমে কোয়েরি করে নির্ধারণ করা হয়:

  1. ক্যারিয়ার অ্যাপ (এটি ঐচ্ছিক, তবে Android ওপেন সোর্স প্রোজেক্টে (AOSP) যা আছে তার বাইরে অতিরিক্ত কনফিগারেশনের জন্য এটিই সাজেস্ট করা লোকেশন)
  2. সিস্টেম ইমেজের সাথে বান্ডেল করা প্ল্যাটফর্ম কনফিগারেশন অ্যাপ
  3. ডিফল্ট ভ্যালু, ফ্রেমওয়ার্কে হার্ডকোড করা (Android 6.0-এর আগের ভার্সনের মতো কাজ করে)

প্ল্যাটফর্ম কনফিগার অ্যাপ

সিস্টেম ইমেজের সাথে একটি জেনেরিক প্ল্যাটফর্ম কনফিগারেশন অ্যাপ বান্ডেল করা আছে। এই অ্যাপটি এমন যেকোনও ভেরিয়েবলের জন্য ভ্যালু প্রদান করতে পারে যা সাধারণ পরিষেবা প্রদানকারী অ্যাপ করে না। প্ল্যাটফর্ম কনফিগারেশন অ্যাপ (Android 6.0-এ) এখানে পাওয়া যাবে: packages/apps/CarrierConfig

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

কীভাবে পরিষেবা প্রদানকারীর অ্যাপকে বিশেষ সুবিধা দেওয়া হয়

UICC ক্যারিয়ার প্রিভিলেজ-এ যেমন ডকুমেন্ট করা আছে, সেই অনুযায়ী সিম কার্ডে পাওয়া একই সার্টিফিকেট দিয়ে সংশ্লিষ্ট ক্যারিয়ার অ্যাপে সাইন-ইন করতে হবে।

পরিষেবা প্রদানকারী অ্যাপে কী তথ্য পাঠানো হয়

ক্যারিয়ার অ্যাপকে নিম্নলিখিত ভ্যালু প্রদান করা হয়, এর ফলে কোন ভ্যালু রিটার্ন করতে হবে সেই বিষয়ে ডায়নামিক সিদ্ধান্ত নিতে পারে:

  • MCC
  • MNC
  • SPN
  • IMSI
  • GID১
  • GID২
  • পরিষেবা প্রদানকারী আইডি

ক্যারিয়ার আইডি ইন্টিগ্রেট করা সম্পর্কে আরও তথ্যের জন্য, দেখুন CarrierConfig-এর সাথে ক্যারিয়ার আইডি ইন্টিগ্রেট করা।

পরিষেবা প্রদানকারীর কনফিগারেশন লোড করার সময়

কী-ভ্যালু পেয়ারের তালিকা তৈরি করা হয়:

  • সিম লোড করা হলে (বুট বা সিম হট সোয়াপ)
  • কখন পরিষেবা প্রদানকারী অ্যাপ ম্যানুয়ালি রিলোড ট্রিগার করে
  • কখন পরিষেবা প্রদানকারী অ্যাপ আপডেট করা হয়

আরও বিবরণের জন্য android.service.carrier.CarrierService#onLoadConfig() রেফারেন্স দেখুন।

কনফিগারেশন ব্যবহার করুন

কনফিগারেশন তৈরি হয়ে গেলে, এর মধ্যে থাকা ভ্যালুগুলি সিস্টেম কনফিগারেশনের বিভিন্ন ভ্যালু সেট করতে ব্যবহার করা হয়, যার মধ্যে এগুলি অন্তর্ভুক্ত:

  • ইন্টার্নাল ফ্রেমওয়ার্ক টেলিফোনি সেটিংস
  • SDK-এর মাধ্যমে পাওয়া কনফিগারেশন ভ্যালু, যেমন, SmsManager-এ
  • Dialer-এ VVM কানেকশন ভ্যালুর মতো অ্যাপ সেটিংস

কনফিগারেশন কী

কী-এর তালিকা android.telephony.CarrierConfigManager এ পাবলিক SDK-এর অংশ হিসেবে সংজ্ঞায়িত করা হয়েছে এবং একই API লেভেলের মধ্যে পরিবর্তন করা যাবে না। কী-এর সারসংক্ষেপের জন্য নিচের টেবিল দেখুন।

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

অ্যাপ তৈরি করা

আপনার অ্যাপকে অবশ্যই Android 6.0 API লেভেল (23)-কে টার্গেট করতে হবে।

android.service.carrier.CarrierService ওভাররাইড করে এমন ক্লাস ঘোষণা করুন

  1. service.carrier.CarrierIdentifier অবজেক্টের উপর ভিত্তি করে আপনি যে ভ্যালু দিতে চান তা ফেরত পেতে onLoadConfig ওভাররাইড করুন।
  2. এমন পরিস্থিতি যেখানে ক্যারিয়ার কনফিগারেশন সময়ের সাথে সাথে পরিবর্তিত হতে পারে (যেমন, যখন ব্যবহারকারী তার অ্যাকাউন্টে অতিরিক্ত পরিষেবা যোগ করেন), সেখানে 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 দেখুন।

অ্যাপ টেস্ট করুন

কনফিগারেশন অ্যাপ তৈরি করা হয়ে গেলে, আপনি নিজের কোড এর মাধ্যমে পরীক্ষা করতে পারবেন:

  • সঠিক সার্টিফিকেট স্বাক্ষর সহ একটি সিম
  • Android 6.0 ও তার পরবর্তী যেকোনও ভার্সন থাকা ডিভাইস, যেমন Android ডিভাইস

পরিষেবা প্রদানকারীর পরিষেবার ক্ষমতা সেট করা

Android-এ, কোনও ডিভাইসে ভয়েস, মেসেজিং ও ডেটা পরিষেবা কাজ করে কিনা তা ক্যারিয়ার পরিষেবা সংক্রান্ত সুবিধা থেকে জানা যায়। ক্যারিয়াররা ডিভাইস লেভেলে এবং সাবস্ক্রিপশন লেভেলে (Android 15 বা তার পরের যেকোনও ভার্সন) কোনও ডিভাইসের জন্য ক্যারিয়ার পরিষেবা সংক্রান্ত ক্ষমতা নির্দিষ্ট করতে পারে।

ডিভাইস-লেভেল পরিষেবা সংক্রান্ত ক্ষমতা

কোনও ডিভাইস তৈরি করার সময় ডিভাইস-লেভেল পরিষেবা সংক্রান্ত ক্ষমতা কনফিগার করা হয় (তৈরি করার পরে এটি পরিবর্তন করা যায় না)। পরিষেবা প্রদানকারী নিম্নলিখিত সিস্টেম রিসোর্স ওভাররাইডের মাধ্যমে ডিভাইস-লেভেল ক্ষমতা নির্দিষ্ট করতে পারে:

অ্যাপ নিম্নলিখিত API-এর মাধ্যমে ডিভাইস-লেভেল পরিষেবার ক্ষমতা সম্পর্কে কোয়েরি করতে পারে:

সাবস্ক্রিপশন-লেভেল পরিষেবার ক্ষমতা

Android 15 বা তার পরবর্তী যেকোনও ভার্সনে চলা ডিভাইসের জন্য, সাবস্ক্রিপশন লেভেলে ক্যারিয়াররা ডিভাইসের পরিষেবা সংক্রান্ত ক্ষমতা নির্দিষ্ট করতে পারে। সাবস্ক্রিপশন-লেভেল পরিষেবা ক্ষমতা নির্দিষ্ট করতে, CarrierConfigManager.KEY_CELLULAR_SERVICE_CAPABILITIES_INT_ARRAY API ব্যবহার করুন। যেমন, কোনও সাবস্ক্রিপশন শুধুমাত্র ডেটার জন্য তা নির্দিষ্ট করতে, ভ্যালু SubscriptionManager#SERVICE_CAPABILITY_DATA-এ সেট করুন।

অ্যাপ (আগে থেকে লোড করা সিস্টেম অ্যাপ এবং থার্ড-পার্টি অ্যাপ) SubscriptionInfo.getServiceCapabilities() পদ্ধতির মাধ্যমে নির্দিষ্ট সাবস্ক্রিপশনের জন্য পরিষেবা প্রদানকারী অপারেটরের পরিষেবা সংক্রান্ত ক্ষমতা সম্পর্কে কোয়েরি করতে পারে। এর ফলে, অ্যাপ ডেভেলপাররা সাবস্ক্রিপশনের জন্য উপলভ্য ফিচারের উপর ভিত্তি করে অ্যাপের ব্যবহারকারীর অভিজ্ঞতা কাস্টমাইজ করতে পারেন। যেমন, অ্যাপ ডেভেলপাররা নিশ্চিত করতে পারেন যে ব্যবহারকারী শুধুমাত্র ডেটা সাবস্ক্রিপশন ব্যবহার করলে ডায়ালার অ্যাপ কল করার অনুমতি দেয় না।

পরিষেবার ক্ষমতা সংক্রান্ত অননুমোদিত API

Android 15 থেকে শুরু করে, Android ডিভাইস-লেভেল ও সাবস্ক্রিপশন-লেভেল পরিষেবা সংক্রান্ত ক্ষমতা প্রদান করে। এই পরিবর্তনের কারণে, আরও ভালভাবে পড়ার জন্য, আগে থেকে থাকা ডিভাইস-লেভেল ক্যাপাবিলিটি API-এর নাম পরিবর্তন করা হয়েছে। নিম্নলিখিত সারণীতে Android 15-এ বন্ধ হয়ে যাওয়া API এবং নাম পরিবর্তন করা API-এর তালিকা দেওয়া হল:

বন্ধ করে দেওয়া হয়েছে (Android 14 বা এর আগের যেকোনও ভার্সন) সমতুল্য (Android 15 বা এর পরের যেকোনও ভার্সন)
TelephonyManager.isVoiceCapable() TelephonyManager.isDeviceVoiceCapable()
TelephonyManager.isSmsCapable() TelephonyManager.isDeviceSmsCapable()