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

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

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

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

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

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

  • ডায়নামিক কনফিগারেশন - নন-MCCMNC প্রাপ্ত কনফিগারেশনের মতো ধারণাগুলির জন্য সমর্থন, উদাহরণস্বরূপ, মোবাইল ভার্চুয়াল নেটওয়ার্ক অপারেটর (MVNOs) বা গ্রাহকরা অতিরিক্ত পরিষেবাগুলিতে বেছে নেওয়া।
  • যেকোনো চ্যানেলের মাধ্যমে বিক্রি হওয়া ডিভাইসগুলির জন্য সমর্থন - উদাহরণস্বরূপ, একটি খোলা বাজারের ফোন একটি অ্যাপ স্টোর থেকে একটি অ্যাপ ডাউনলোড করে সঠিক সেটিংসের সাথে স্বয়ংক্রিয়ভাবে কনফিগার করা যেতে পারে।
  • নিরাপত্তা - এই কনফিগারেশন প্রদান করার বিশেষাধিকার শুধুমাত্র ক্যারিয়ার দ্বারা স্বাক্ষরিত অ্যাপগুলিতে দেওয়া হয়৷
  • Defined API - Previously this configuration was stored mostly in internal XML overlays within the framework and not through a public API. Android 6.0-এ ক্যারিয়ার কনফিগার API সর্বজনীন এবং ভালভাবে সংজ্ঞায়িত।

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

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

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

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

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

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

একটি জেনেরিক প্ল্যাটফর্ম কনফিগারেশন অ্যাপটি সিস্টেম ইমেজের সাথে বান্ডিল করা হয়েছে। এই অ্যাপটি যেকোনো ভেরিয়েবলের জন্য মান সরবরাহ করতে পারে যা নিয়মিত ক্যারিয়ার অ্যাপ করে না। প্ল্যাটফর্ম কনফিগারেশন অ্যাপটি পাওয়া যাবে (অ্যান্ড্রয়েড 6.0 এ) এতে: packages/apps/CarrierConfig

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

একটি ক্যারিয়ার অ্যাপকে কীভাবে বিশেষাধিকার দেওয়া হয়

প্রশ্নে থাকা ক্যারিয়ার অ্যাপটিকে অবশ্যই সিম কার্ডে পাওয়া একই শংসাপত্রের সাথে স্বাক্ষর করতে হবে, যেমনটি UICC ক্যারিয়ারের বিশেষাধিকারগুলিতে নথিভুক্ত করা হয়েছে৷

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

ক্যারিয়ার অ্যাপটি নিম্নলিখিত মানগুলির সাথে সরবরাহ করা হয়েছে, এটি কোন মানগুলি ফেরত দিতে হবে সে সম্পর্কে একটি গতিশীল সিদ্ধান্ত নিতে সক্ষম করে:

  • এমসিসি
  • MNC
  • এসপিএন
  • IMSI
  • GID1
  • GID2
  • ক্যারিয়ার আইডি

ক্যারিয়ার আইডি একীভূত করার বিষয়ে আরও তথ্যের জন্য, CarrierConfig-এর সাথে ক্যারিয়ার আইডি একীভূত করা দেখুন।

ক্যারিয়ার কনফিগারেশন লোড করার সময় ঘটে

মূল মান জোড়ার তালিকার বিল্ডিং ঘটে:

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

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

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

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

  • অভ্যন্তরীণ ফ্রেমওয়ার্ক টেলিফোনি সেটিংস
  • SDK-প্রত্যাবর্তিত কনফিগারেশন মান, উদাহরণস্বরূপ, SmsManager-এ
  • ডায়লারে 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 যোগ করতে (উদাহরণস্বরূপ, সিম অ্যাক্টিভেশনের সময়), URI android.provider.Telephony.Carriers.CONTENT_URI দ্বারা চিহ্নিত একটি সামগ্রী প্রদানকারীতে APN আইটেম যোগ করতে ContentResolver API ব্যবহার করুন। বিষয়বস্তু URI-এর জন্য টেবিল গঠন সম্পর্কে আরও তথ্যের জন্য, Telephony.Carriers দেখুন।

আরও তথ্যের জন্য, APN এবং CarrierConfig দেখুন।

অ্যাপটি পরীক্ষা করুন

আপনি যখন আপনার কনফিগারেশন অ্যাপ তৈরি করেন, তখন আপনি আপনার কোড পরীক্ষা করতে পারেন:

  • একটি বৈধ শংসাপত্র স্বাক্ষর সহ একটি সিম
  • Android 6.0 এবং তার পরের সংস্করণে চলমান একটি ডিভাইস, উদাহরণস্বরূপ একটি Android ডিভাইস

ক্যারিয়ার পরিষেবা ক্ষমতা সেট করুন

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

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

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

অ্যাপগুলি নিম্নলিখিত APIগুলির মাধ্যমে ডিভাইস-স্তরের পরিষেবার ক্ষমতাগুলি জিজ্ঞাসা করতে পারে:

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

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

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

অপ্রচলিত পরিষেবা ক্ষমতা APIs

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

অপ্রচলিত (Android 14 বা তার কম) সমতুল্য (Android 15 বা উচ্চতর)
TelephonyManager.isVoiceCapable() TelephonyManager.isDeviceVoiceCapable()
TelephonyManager.isSmsCapable() TelephonyManager.isDeviceSmsCapable()