eUICC एपीआई

Android 9 में, प्रोफ़ाइल मैनेजमेंट एपीआई (सार्वजनिक और @SystemApi) की सुविधाएं EuiccManager क्लास में उपलब्ध हैं. eUICC कम्यूनिकेशन एपीआई (सिर्फ़ @SystemApi) क्लास EuiccCardManager के ज़रिए उपलब्ध हैं.

eUICC के बारे में जानकारी

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

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

पहला डायग्राम. मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन और OEM एलपीए वाले Android फ़ोन

EuiccCardManager को कॉल करने और ईयूआईसीसी से बात करने के अलावा, एलपीए ऐप्लिकेशन को नीचे दी गई चीज़ें लागू करनी होंगी:

  • SM-DP+ क्लाइंट, पुष्टि करने के लिए SM-DP+ सर्वर से बात कर रहा है और प्रोफ़ाइलें डाउनलोड करें
  • [ज़रूरी नहीं] SM-DS की मदद से, डाउनलोड की जा सकने वाली ज़्यादा से ज़्यादा प्रोफ़ाइलें पाएं
  • सर्वर को सूचनाएं भेजने के लिए, सूचना मैनेज करना प्रोफ़ाइल का स्टेटस अपडेट करो
  • [ज़रूरी नहीं] स्लॉट मैनेज करने की सुविधा. इसमें ई-सिम और Pसिम लॉजिक के बीच स्विच करना भी शामिल है. अगर फ़ोन में सिर्फ़ ई-सिम चिप है, तो यह तरीका इस्तेमाल करना ज़रूरी नहीं है.
  • ई-सिम ओटीए

किसी Android फ़ोन में एक से ज़्यादा एलपीए ऐप्लिकेशन इस्तेमाल किए जा सकते हैं. हालांकि, सिर्फ़ एक एलपीए ऐप्लिकेशन मौजूद हो सकता है में परिभाषित प्राथमिकता के आधार पर वास्तविक रूप से चालू एलपीए के तौर पर चुना जा सकता है हर ऐप्लिकेशन की AndroidManifest.xml फ़ाइल.

EuiccManager का इस्तेमाल करें

एलपीए एपीआई, EuiccManager (पैकेज के तहत) में सार्वजनिक होते हैं android.telephony.euicc). मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन को EuiccManager का इंस्टेंस मिल सकता है. साथ ही, eUICC की जानकारी पाने और उसे मैनेज करने के लिए, EuiccManager में दिए गए तरीकों को कॉल करें सदस्यताएं (जिन्हें GSMA RSP दस्तावेज़ों में प्रोफ़ाइल कहा जाता है) के तौर पर SubscriptionInfo इंस्टेंस.

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

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

एकाधिक सक्षम प्रोफ़ाइल API के बारे में जानकारी के लिए, देखें एक से ज़्यादा ऐसी प्रोफ़ाइलें जिन्हें चालू किया गया है.

API

यहां दिए गए एपीआई, EuiccManager के रेफ़रंस के लिए दस्तावेज़ और EuiccManager.java.

इंस्टेंस पाएं (सार्वजनिक)

Context#getSystemService से EuiccManager का इंस्टेंस फ़ेच करता है. जानकारी के लिए, यह देखें getSystemService.

EuiccManager mgr = (EuiccManager) context.getSystemService(Context.EUICC_SERVICE);

जाँच करने की सुविधा चालू है (सार्वजनिक)

यह देखता है कि एम्बेड की गई सदस्यता चालू है या नहीं. इसकी जाँच होनी चाहिए एलपीए एपीआई ऐक्सेस करने से पहले. जानकारी के लिए, यह देखें isEnabled.

boolean isEnabled = mgr.isEnabled();
if (!isEnabled) {
    return;
}

ईआईडी पाएं (सार्वजनिक)

eUICC हार्डवेयर की पहचान करने वाला ईआईडी मिलता है. अगर eUICC है, तो यह शून्य हो सकता है तैयार नहीं है. कॉल करने वाले के पास मोबाइल और इंटरनेट सेवा देने वाली कंपनी का खास अधिकार होना चाहिए या READ_PRIVILEGED_PHONE_STATE की अनुमति. जानकारी के लिए, यह देखें getEid.

String eid = mgr.getEid();
if (eid == null) {
  // Handle null case.
}

EuiccInfo (सार्वजनिक) पाएं

eUICC के बारे में जानकारी मिलती है. इसमें ओएस का वर्शन शामिल है. जानकारी के लिए, देखें getEuiccInfo.

EuiccInfo info = mgr.getEuiccInfo();
String osVer = info.getOsVersion();

सदस्यता डाउनलोड करें (सार्वजनिक)

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

कॉल करने वाले (कॉलर) के पास WRITE_EMBEDDED_SUBSCRIPTIONS की अनुमति होनी चाहिए या उसके पास टारगेट सदस्यता के लिए मोबाइल और इंटरनेट सेवा देने वाली कंपनी के अधिकार होते हैं. जानकारी के लिए, यह देखें downloadSubscription.

// Register receiver.
String action = "download_subscription";
BroadcastReceiver receiver =
        new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (!action.equals(intent.getAction())) {
                    return;
                }
                resultCode = getResultCode();
                detailedCode = intent.getIntExtra(
                    EuiccManager.EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE,
                    0 /* defaultValue*/);
                resultIntent = intent;
            }
        };
context.registerReceiver(
        receiver,
        new IntentFilter(action),
        "example.broadcast.permission" /* broadcastPermission*/, null /* handler */);

// Download subscription asynchronously.
DownloadableSubscription sub =
        DownloadableSubscription.forActivationCode(code /* encodedActivationCode*/);
Intent intent = new Intent(action);
PendingIntent callbackIntent = PendingIntent.getBroadcast(
        getContext(), 0 /* requestCode */, intent, PendingIntent.FLAG_UPDATE_CURRENT);
mgr.downloadSubscription(sub, true /* switchAfterDownload */, callbackIntent);

सदस्यता बदलें (सार्वजनिक)

दी गई सदस्यता पर स्विच करता है (चालू करता है). कॉल करने वाले के पास इनमें से कोई एक होना चाहिए WRITE_EMBEDDED_SUBSCRIPTIONS या आपके पास मौजूदा समय के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के खास अधिकार हैं और टारगेट सदस्यता को चालू किया गया हो. जानकारी के लिए, यह देखें switchToSubscription.

// Register receiver.
String action = "switch_to_subscription";
BroadcastReceiver receiver =
        new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (!action.equals(intent.getAction())) {
                    return;
                }
                resultCode = getResultCode();
                detailedCode = intent.getIntExtra(
                    EuiccManager.EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE, 0 /* defaultValue*/);
                resultIntent = intent;
            }
        };
context.registerReceiver(receiver, new IntentFilter(action),
        "example.broadcast.permission" /* broadcastPermission*/, null /* handler */);

// Switch to a subscription asynchronously.
Intent intent = new Intent(action);
PendingIntent callbackIntent = PendingIntent.getBroadcast(
        getContext(), 0 /* requestCode */, intent, PendingIntent.FLAG_UPDATE_CURRENT);
mgr.switchToSubscription(1 /* subscriptionId */, callbackIntent);

पोर्ट करने की सुविधा के साथ सदस्यता स्विच करें (सार्वजनिक)

(Android 13 में उपलब्ध) इस पर स्विच करता है (चालू करता है) पोर्ट इंडेक्स के साथ दी गई सदस्यता. कॉल करने वाले (कॉलर) के पास WRITE_EMBEDDED_SUBSCRIPTIONS या मोबाइल और इंटरनेट सेवा देने वाली कंपनी होनी चाहिए मौजूदा चालू सदस्यता और टारगेट सदस्यता के लिए खास अधिकार. जानकारी के लिए, यह देखें switchToSubscription.

// Register receiver.
String action = "switch_to_subscription";
BroadcastReceiver receiver =
        new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (!action.equals(intent.getAction())) {
                    return;
                }
                resultCode = getResultCode();
                detailedCode = intent.getIntExtra(
                    EuiccManager.EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE, 0 /* defaultValue*/);
                resultIntent = intent;
            }
        };
context.registerReceiver(receiver, new IntentFilter(action),
        "example.broadcast.permission" /* broadcastPermission*/, null /* handler */);

// Switch to a subscription asynchronously.
Intent intent = new Intent(action);
PendingIntent callbackIntent = PendingIntent.getBroadcast(
        getContext(), 0 /* requestCode */, intent, PendingIntent.FLAG_UPDATE_CURRENT);
mgr.switchToSubscription(1 /* subscriptionId */, 0 /*portIndex*/, callbackIntent);

क्या सिम पोर्ट उपलब्ध है (सार्वजनिक)

public boolean isSimPortAvailable(int portIndex)

(Android 13 में उपलब्ध) इससे पता चलता है कि पासिंग पोर्ट इंडेक्स उपलब्ध है. पोर्ट तभी उपलब्ध होता है, जब यह कोई सदस्यता चालू न हो या कॉलिंग ऐप्लिकेशन के पास चुने गए पोर्ट पर सदस्यता इंस्टॉल की गई. जानकारी के लिए, यह देखें isSimPortAvailable.

सदस्यता (सार्वजनिक) मिटाएं

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

// Register receiver.
String action = "delete_subscription";
BroadcastReceiver receiver =
        new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (!action.equals(intent.getAction())) {
                    return;
                }
                resultCode = getResultCode();
                detailedCode = intent.getIntExtra(
                    EuiccManager.EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE,
                    0 /* defaultValue*/);
                resultIntent = intent;
            }
        };
context.registerReceiver(receiver, new IntentFilter(action),
        "example.broadcast.permission" /* broadcastPermission*/,
        null /* handler */);

// Delete a subscription asynchronously.
Intent intent = new Intent(action);
PendingIntent callbackIntent = PendingIntent.getBroadcast(
        getContext(), 0 /* requestCode */, intent, PendingIntent.FLAG_UPDATE_CURRENT);
mgr.deleteSubscription(1 /* subscriptionId */, callbackIntent);

सभी सदस्यताएं हमेशा के लिए मिटाएं (सिस्टम एपीआई)

डिवाइस पर मौजूद सभी सदस्यताएं हमेशा के लिए मिटाएं. Android में शुरू हो रहा है 11, आपको EuiccCardManager#ResetOption उपलब्ध कराना चाहिए enum की वैल्यू, जिससे यह तय किया जा सके कि टेस्ट, ऑपरेशनल या दोनों तरह के डेटा को हमेशा के लिए मिटाना है या नहीं सदस्यताएं. कॉल करने वाले (कॉलर) के पास WRITE_EMBEDDED_SUBSCRIPTIONS की अनुमति होनी चाहिए.

// Register receiver.
String action = "delete_subscription";
BroadcastReceiver receiver =
        new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (!action.equals(intent.getAction())) {
                    return;
                }
                resultCode = getResultCode();
                detailedCode = intent.getIntExtra(
                    EuiccManager.EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE,
                    0 /* defaultValue*/);
                resultIntent = intent;
            }
        };
context.registerReceiver(receiver, new IntentFilter(action),
        "example.broadcast.permission" /* broadcastPermission*/,
        null /* handler */);

// Erase all operational subscriptions asynchronously.
Intent intent = new Intent(action);
PendingIntent callbackIntent = PendingIntent.getBroadcast(
        getContext(), 0 /* requestCode */, intent, PendingIntent.FLAG_UPDATE_CURRENT);
mgr.eraseSubscriptions(
        EuiccCardManager.RESET_OPTION_DELETE_OPERATIONAL_PROFILES, callbackIntent);

समस्या हल करने की गतिविधि शुरू करें (सार्वजनिक)

ऐसी गड़बड़ी को ठीक करने के लिए गतिविधि शुरू करता है जिसे उपयोगकर्ता ठीक कर सकता है. अगर कोई कार्रवाई वापस आती है EuiccManager#EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR, इस तरीके से उपयोगकर्ता को समस्या हल करने के लिए कहा गया. इस तरीके को सिर्फ़ कॉल किया जा सकता है किसी खास गड़बड़ी को ठीक करने के लिए सिर्फ़ एक बार.

...
mgr.startResolutionActivity(getActivity(), 0 /* requestCode */, resultIntent, callbackIntent);

स्थिरांक

EuiccManager में public कॉन्सटेंट की सूची देखने के लिए, देखें कॉन्सटेंट.