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

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

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

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

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

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

कैरियर ऐप्लिकेशन को ये वैल्यू दी जाती हैं, ताकि वह यह फ़ैसला ले सके कि कौनसी वैल्यू दिखानी हैं:

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

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

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

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

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

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

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

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

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

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

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

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