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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • एमसीसी
  • MNC
  • SPN
  • IMSI
  • GID1
  • जीआईडी2
  • कैरियर आईडी

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

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

की-वैल्यू पेयर की सूची बनाने की प्रोसेस:

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

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

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

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

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

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

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

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

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

आपके ऐप्लिकेशन को 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 डिवाइस-लेवल और सदस्यता-लेवल, दोनों तरह की सेवाएं उपलब्ध कराता है. इस बदलाव की वजह से, डिवाइस लेवल के मौजूदा capabilities के एपीआई के नाम बदल दिए गए हैं, ताकि उन्हें आसानी से पढ़ा जा सके. यहां दी गई टेबल में, अब काम न करने वाले एपीआई और Android 15 में पेश किए गए एपीआई के नाम बताए गए हैं:

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