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

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

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

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

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

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

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

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

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

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

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

  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() रेफ़रंस देखें.

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

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

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

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

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

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

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

आपके ऐप्लिकेशन को Android 6.0 के एपीआई लेवल (23) को टारगेट करना होगा.

android.service.carrier.CarrierService को बदलने वाली क्लास का एलान करें

  1. onLoadConfig को बदलें, ताकि पास किए गए service.carrier.CarrierIdentifier ऑब्जेक्ट के आधार पर, आपको जो वैल्यू देनी हैं उन्हें दिखाया जा सके.
  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>

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

ज़रूरी शर्तों के बारे में जानने के लिए, यूआईसीसी कैरियर के विशेषाधिकार देखें.

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

कैरियर ऐप्लिकेशन से APN को प्रोग्राम के हिसाब से जोड़ने के लिए, ContentResolver API का इस्तेमाल करें. उदाहरण के लिए, सिम चालू करने के दौरान APN आइटम को ऐसे कॉन्टेंट प्रोवाइडर में जोड़ने के लिए जिनका पता यूआरआई 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()