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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • एमसीसी
  • 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 देखें.

ज़्यादा जानकारी के लिए, APN और 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()