कैरियर कॉन्फ़िगरेशन

Android 6.0 और इसके बाद के वर्शन में, खास अधिकारों वाले ऐप्लिकेशन को प्लैटफ़ॉर्म के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के हिसाब से कॉन्फ़िगरेशन उपलब्ध कराने की सुविधा मिलती है. यह सुविधा, Android 5.1 (Lollipop MR1) में पेश की गई यूआईसीसी कैरियर प्रिवलेज पर आधारित है. इसकी मदद से, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के कॉन्फ़िगरेशन को स्टैटिक कॉन्फ़िगरेशन ओवरले से हटाया जा सकता है. साथ ही, मोबाइल और इंटरनेट सेवा देने वाली कंपनियों और ओईएम को, तय किए गए इंटरफ़ेस के ज़रिए प्लैटफ़ॉर्म को डाइनैमिक तरीके से कॉन्फ़िगरेशन उपलब्ध कराने की सुविधा मिलती है.

मोबाइल और इंटरनेट सेवा देने वाली कंपनी का सही तरीके से साइन किया गया ऐप्लिकेशन, सिस्टम इमेज में पहले से लोड किया जा सकता है. इसे अपने-आप इंस्टॉल किया जा सकता है या ऐप्लिकेशन स्टोर से मैन्युअल तरीके से इंस्टॉल किया जा सकता है. प्लैटफ़ॉर्म, सेटिंग के लिए कॉन्फ़िगरेशन उपलब्ध कराने के लिए, ऐप्लिकेशन से क्वेरी करता है. इसमें ये सेटिंग शामिल हैं:

  • रोमिंग/नॉन-रोमिंग नेटवर्क
  • विज़ुअल वॉइसमेल
  • एसएमएस/एमएमएस नेटवर्क की सेटिंग
  • VoLTE/IMS कॉन्फ़िगरेशन

कौनसी वैल्यू दिखानी हैं, यह पूरी तरह से मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन पर निर्भर करता है. साथ ही, यह प्लैटफ़ॉर्म के ज़रिए ऐप्लिकेशन को भेजी गई ज़्यादा जानकारी के आधार पर डाइनैमिक हो सकता है.

इस तरीके के मुख्य फ़ायदे ये हैं:

  • डाइनैमिक कॉन्फ़िगरेशन - नॉन-एमसीसीएमएनसी से मिले कॉन्फ़िगरेशन जैसे कॉन्सेप्ट के लिए सहायता. उदाहरण के लिए, मोबाइल वर्चुअल नेटवर्क ऑपरेटर (एमवीएनओ) या ग्राहक के पास अतिरिक्त सेवाओं को चुनने का विकल्प.
  • किसी भी चैनल से बेचे गए डिवाइसों के लिए सहायता - उदाहरण के लिए, किसी ऐप स्टोर से ऐप्लिकेशन डाउनलोड करके, ओपन मार्केट फ़ोन को सही सेटिंग के साथ अपने-आप कॉन्फ़िगर किया जा सकता है.
  • सुरक्षा - यह कॉन्फ़िगरेशन उपलब्ध कराने का खास अधिकार, सिर्फ़ मोबाइल और इंटरनेट सेवा देने वाली कंपनी के साइन किए गए ऐप्लिकेशन को दिया जाता है.
  • तय किया गया एपीआई - पहले, इस कॉन्फ़िगरेशन को ज़्यादातर फ़्रेमवर्क में मौजूद इंटरनल एक्सएमएल ओवरले में सेव किया जाता था. इसे सार्वजनिक एपीआई के ज़रिए सेव नहीं किया जाता था. Android 6.0 में, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के कॉन्फ़िगरेशन का एपीआई सार्वजनिक है और इसे अच्छी तरह से तय किया गया है.

यह कैसे काम करता है

कॉन्फ़िगरेशन लोड करना

इस सुविधा से उपलब्ध कराया गया मोबाइल और इंटरनेट सेवा देने वाली कंपनी का कॉन्फ़िगरेशन, की-वैल्यू पेयर का एक सेट होता है. इससे प्लैटफ़ॉर्म में, टेलीफ़ोनी से जुड़े अलग-अलग व्यवहार में बदलाव होता है.

किसी खास डिवाइस के लिए वैल्यू का सेट, क्रम से इन कॉम्पोनेंट से क्वेरी करके तय किया जाता है:

  1. मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन (यह ज़रूरी नहीं है. हालांकि, Android Open Source Project (AOSP) में मौजूद कॉन्फ़िगरेशन के अलावा, अन्य कॉन्फ़िगरेशन के लिए यह सुझाई गई जगह है)
  2. सिस्टम इमेज के साथ बंडल किया गया प्लैटफ़ॉर्म कॉन्फ़िगरेशन ऐप्लिकेशन
  3. डिफ़ॉल्ट वैल्यू, जिन्हें फ़्रेमवर्क में हार्डकोड किया गया है (यह Android 6.0 से पहले के वर्शन के व्यवहार के बराबर है)

प्लैटफ़ॉर्म कॉन्फ़िगरेशन ऐप्लिकेशन

सिस्टम इमेज के साथ, सामान्य प्लैटफ़ॉर्म कॉन्फ़िगरेशन ऐप्लिकेशन बंडल किया जाता है. यह ऐप्लिकेशन, उन सभी वैरिएबल के लिए वैल्यू उपलब्ध करा सकता है जिनके लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी का सामान्य ऐप्लिकेशन वैल्यू उपलब्ध नहीं कराता. प्लैटफ़ॉर्म कॉन्फ़िगरेशन ऐप्लिकेशन, Android 6.0 में यहां मौजूद है: packages/apps/CarrierConfig

इस ऐप्लिकेशन का मकसद, मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन इंस्टॉल न होने पर, नेटवर्क के हिसाब से कुछ कॉन्फ़िगरेशन उपलब्ध कराना है. साथ ही, मोबाइल और इंटरनेट सेवा देने वाली कंपनियों/ओईएम को अपनी इमेज में इसमें सिर्फ़ मामूली बदलाव करने चाहिए. इसके बजाय, मोबाइल और इंटरनेट सेवा देने वाली कंपनियों को, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के हिसाब से कस्टमाइज़ेशन के लिए, अलग से ऐप्लिकेशन उपलब्ध कराना चाहिए. इससे ऐप्लिकेशन स्टोर जैसे प्लैटफ़ॉर्म के ज़रिए अपडेट डिस्ट्रिब्यूट किए जा सकते हैं.

मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन को खास अधिकार कैसे दिए जाते हैं

मोबाइल और इंटरनेट सेवा देने वाली कंपनी के जिस ऐप्लिकेशन की बात की जा रही है उसे उसी सर्टिफ़िकेट से साइन किया जाना चाहिए जो सिम कार्ड पर मौजूद है. इसकी जानकारी, यूआईसीसी कैरियर प्रिवलेज में दी गई है.

मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन को कौनसी जानकारी भेजी जाती है

मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन को ये वैल्यू उपलब्ध कराई जाती हैं. इससे वह यह तय कर पाता है कि कौनसी वैल्यू दिखानी हैं:

  • MCC
  • MNC
  • SPN
  • IMSI
  • GID1
  • GID2
  • मोबाइल और इंटरनेट सेवा देने वाली कंपनी का आईडी

मोबाइल और इंटरनेट सेवा देने वाली कंपनी के आईडी को इंटिग्रेट करने के बारे में ज़्यादा जानने के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के आईडी को CarrierConfig के साथ इंटिग्रेट करना लेख पढ़ें.

मोबाइल और इंटरनेट सेवा देने वाली कंपनी का कॉन्फ़िगरेशन कब लोड होता है

की-वैल्यू पेयर की सूची तब बनती है, जब:

  • सिम लोड किया जाता है (बूट या सिम हॉट स्वैप)
  • मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन, मैन्युअल तरीके से रिलोड ट्रिगर करता है
  • मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन अपडेट होता है

ज़्यादा जानकारी के लिए, android.service.carrier.CarrierService#onLoadConfig() रेफ़रंस देखें.

कॉन्फ़िगरेशन का इस्तेमाल करना

कॉन्फ़िगरेशन बनने के बाद, उसमें मौजूद वैल्यू का इस्तेमाल करके, सिस्टम कॉन्फ़िगरेशन की अलग-अलग वैल्यू सेट की जाती हैं. इनमें ये शामिल हैं:

  • इंटरनल फ़्रेमवर्क टेलीफ़ोनी सेटिंग
  • एसडीके से मिली कॉन्फ़िगरेशन वैल्यू. उदाहरण के लिए, SmsManager में
  • ऐप्लिकेशन सेटिंग. जैसे, डायलर में वीवीएम कनेक्शन की वैल्यू

कॉन्फ़िगरेशन की कुंजियां

कुंजियों की सूची, सार्वजनिक एसडीके के हिस्से के तौर पर android.telephony.CarrierConfigManager में तय की जाती है. इसे एक ही एपीआई लेवल में नहीं बदला जा सकता. कुंजियों की खास जानकारी के लिए, यहां दी गई टेबल देखें.

ऐप्लिकेशन बनाना

ऐप्लिकेशन बनाना

आपके ऐप्लिकेशन को Android 6.0 (एपीआई लेवल 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>

सिम पर मौजूद उसी सर्टिफ़िकेट से ऐप्लिकेशन को साइन करना

ज़रूरी शर्तों के लिए, यूआईसीसी कैरियर प्रिवलेज देखें.

मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन के साथ एपीएन जोड़ना

मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन से प्रोग्राम के ज़रिए एपीएन जोड़ने के लिए (उदाहरण के लिए, सिम चालू करने के दौरान), ContentResolver एपीआई का इस्तेमाल करके, एपीएन आइटम को कॉन्टेंट प्रोवाइडर में जोड़ा जा सकता है. इसकी पहचान, यूआरआई android.provider.Telephony.Carriers.CONTENT_URI से होती है. कॉन्टेंट यूआरआई के लिए टेबल के स्ट्रक्चर के बारे में ज़्यादा जानने के लिए, Telephony.Carriers देखें.

ज़्यादा जानकारी के लिए, एपीएन और CarrierConfig देखें.

ऐप्लिकेशन को टेस्ट करना

कॉन्फ़िगरेशन ऐप्लिकेशन बनाने के बाद, अपने कोड को इन चीज़ों के साथ टेस्ट किया जा सकता है:

  • मान्य सर्टिफ़िकेट के हस्ताक्षर वाला सिम
  • Android 6.0 और इसके बाद के वर्शन पर चलने वाला डिवाइस. उदाहरण के लिए, Android डिवाइस

मोबाइल और इंटरनेट सेवा देने वाली कंपनी की सेवा की क्षमताएं सेट करना

Android में, मोबाइल और इंटरनेट सेवा देने वाली कंपनी की सेवा की क्षमताओं से पता चलता है कि किसी डिवाइस पर, वॉइस, मैसेजिंग, और डेटा सेवाएं उपलब्ध हैं या नहीं. मोबाइल और इंटरनेट सेवा देने वाली कंपनियां, डिवाइस के लेवल पर और सदस्यता के लेवल पर (Android 15 या इसके बाद के वर्शन के लिए), किसी डिवाइस के लिए मोबाइल और इंटरनेट सेवा देने वाली कंपनी की सेवा की क्षमताएं तय कर सकती हैं.

डिवाइस के लेवल पर सेवा की क्षमताएं

डिवाइस के लेवल पर सेवा की क्षमताएं, डिवाइस के बनने के दौरान कॉन्फ़िगर की जाती हैं. इन्हें डिवाइस बनने के बाद नहीं बदला जा सकता. मोबाइल और इंटरनेट सेवा देने वाली कंपनियां, सिस्टम के संसाधन को ओवरराइड करके, डिवाइस के लेवल पर क्षमताएं तय कर सकती हैं:

ऐप्लिकेशन, इन एपीआई के ज़रिए डिवाइस के लेवल पर सेवा की क्षमताओं के बारे में क्वेरी कर सकते हैं:

सदस्यता के लेवल पर सेवा की क्षमताएं

Android 15 या इसके बाद के वर्शन पर चलने वाले डिवाइसों के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनियां, सदस्यता के लेवल पर डिवाइस की सेवा की क्षमताएं तय कर सकती हैं. सदस्यता के लेवल पर सेवा की क्षमताएं तय करने के लिए, एपीआई का इस्तेमाल करें. CarrierConfigManager.KEY_CELLULAR_SERVICE_CAPABILITIES_INT_ARRAY उदाहरण के लिए, यह तय करने के लिए कि कोई सदस्यता सिर्फ़ डेटा के लिए है, वैल्यू को SubscriptionManager#SERVICE_CAPABILITY_DATA पर सेट करें.

ऐप्लिकेशन (पहले से लोड किए गए सिस्टम ऐप्लिकेशन और तीसरे पक्ष के ऐप्लिकेशन), मोबाइल और इंटरनेट सेवा देने वाली कंपनी की सेवा की क्षमताओं के बारे में किसी तय सदस्यता के लिए क्वेरी कर सकते हैं. SubscriptionInfo.getServiceCapabilities() इससे ऐप्लिकेशन डेवलपर, सदस्यता के लिए उपलब्ध क्षमताओं के आधार पर, ऐप्लिकेशन के उपयोगकर्ता अनुभव को पसंद के मुताबिक बना सकते हैं. उदाहरण के लिए, ऐप्लिकेशन डेवलपर यह पक्का कर सकते हैं कि अगर उपयोगकर्ता के पास सिर्फ़ डेटा वाली सदस्यता है, तो डायलर ऐप्लिकेशन से कॉल न किए जा सकें.

सेवा की क्षमताओं के लिए पुराने एपीआई

Android 15 से, Android डिवाइस के लेवल पर और सदस्यता के लेवल पर, दोनों तरह की सेवा की क्षमताएं उपलब्ध कराता है. इस बदलाव की वजह से, डिवाइस के लेवल पर सेवा की मौजूदा क्षमताओं के एपीआई के नाम बदलकर, उन्हें बेहतर तरीके से पढ़ा जा सकता है. यहां दी गई टेबल में, पुराने एपीआई और Android 15 में पेश किए गए बदले हुए नामों वाले एपीआई की सूची दी गई है:

पुराना (Android 14 या इससे पहले के वर्शन के लिए) इस्तेमाल किया जाने वाला (Android 15 या इसके बाद के वर्शन के लिए)
TelephonyManager.isVoiceCapable() TelephonyManager.isDeviceVoiceCapable()
TelephonyManager.isSmsCapable() TelephonyManager.isDeviceSmsCapable()