eUICC API'leri

Android 9'da profil yönetimi API'leri (herkese açık ve @SystemApi) EuiccManager sınıfı üzerinden kullanılabilir. eUICC iletişimi API'ler (yalnızca @SystemApi), EuiccCardManager sınıfı üzerinden kullanılabilir.

eUICC hakkında

Operatörler, aşağıda gösterildiği gibi profilleri yönetmek için EuiccManager'ı kullanarak operatör uygulamaları oluşturabilir (Şekil 1'de verilmiştir). Operatör uygulamalarının sistem uygulamaları olması gerekmez, ancak operatöre sahip olmaları gerekir eUICC profilleri tarafından verilen ayrıcalıklar. LPA uygulaması (LUI ve LPA) arka uç) çağrılması için bir sistem uygulaması (yani sistem görüntüsüne dahil) olmalıdır @SystemApi.

Operatör uygulaması ve OEM LPA yüklü Android telefon

Şekil 1. Operatör uygulaması ve OEM LPA'ya sahip Android telefonlar

EuiccCardManager kodunu çağırma ve eUICC ile konuşma mantığının yanı sıra, LPA uygulamaları şunları uygulaması gerekir:

  • Kimlik doğrulaması için SM-DP+ sunucusuyla iletişim kuran SM-DP+ istemcisi profilleri indir
  • [İsteğe bağlı] Daha fazla potansiyel indirilebilir profil elde etmek için SM-DS
  • Sunucuya bildirimlerin gönderilmesi için bildirim işleme profil durumunu güncelle
  • [İsteğe bağlı] eSIM ve pSIM mantığı arasında geçiş dahil olmak üzere yuva yönetimi. Telefonda yalnızca eSIM çipi varsa bu seçenek isteğe bağlıdır.
  • eSIM OTA

Bir Android telefonda birden fazla LPA uygulaması bulunabilse de yalnızca bir tane LPA şu öncelikte tanımlanan önceliğe göre çalışan gerçek LPA olarak seçilebilir: her uygulamanın AndroidManifest.xml dosyasını yükleyebilirsiniz.

EuiccManager'ı kullanma

LPA API'leri, EuiccManager üzerinden herkese açıktır (paket kapsamında) android.telephony.euicc) tıklayın. Bir operatör uygulaması EuiccManager örneğini alabilir, ve eUICC bilgilerini almak ve yönetmek için EuiccManager içindeki yöntemleri çağırın abonelikleri (GSMA RSP dokümanlarında profil olarak adlandırılır) SubscriptionInfo örnekleri

Aboneliği indirme, değiştirme ve silme dahil olmak üzere herkese açık API'leri çağırmak için işlemleri gerçekleştirebilmek için operatör uygulaması gerekli ayrıcalıklara sahip olmalıdır. Operatör ayrıcalıklar, mobil operatör tarafından profil meta verilerine eklenir. eUICC API, operatör ayrıcalığı kurallarını buna göre uygular.

Android platformu, profil politikası kurallarını işlemez. Politika kuralının profili meta verilerinde belirtilmişse LPA, profil indirme ve yükleme prosedürü Örneğin bir politika kurallarını özel bir hata kodu (hata kodu) kullanarak işlemek için üçüncü taraf OEM LPA kodu OEM LPA'dan platforma aktarılır, ardından platform kodunu ekleyin.

Birden fazla etkin profil API'leri hakkında bilgi edinmek için Birden çok etkin profil.

API'ler

Aşağıdaki API'leri EuiccManager referans belgeleri ve EuiccManager.java.

Örnek alma (herkese açık)

Context#getSystemService ile EuiccManager örneğini alır. Ayrıntılar için bkz. getSystemService.

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

Kontrol etkin (herkese açık)

Yerleştirilmiş aboneliğin etkinleştirilip etkinleştirilmediğini kontrol eder. Bu seçenek işaretlenmelidir hakkında daha fazla bilgi edinin. Ayrıntılar için bkz. isEnabled.

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

SIM kimliği alın (herkese açık)

eUICC donanımını tanımlayan EID'yi alır. eUICC ise bu değer boş olabilir: hazır değil. Arayanın operatör ayrıcalığı veya READ_PRIVILEGED_PHONE_STATE izni. Ayrıntılar için bkz. getEid.

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

EuiccInfo Alma (herkese açık)

eUICC hakkında bilgi alır. İşletim sistemi sürümünü içerir. Ayrıntılı bilgi için bkz. getEuiccInfo.

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

Aboneliği indir (herkese açık)

Belirtilen aboneliği (GSMA RSP'de "profil" olarak ifade edilir) indirir belgeler). Abonelik, etkinleştirme kodundan oluşturulabilir. Örneğin, Örneğin, etkinleştirme kodu, QR kodundan ayrıştırılabilir. İndiriliyor: abonelik, eşzamansız bir işlemdir.

Arayanın WRITE_EMBEDDED_SUBSCRIPTIONS iznine sahip olması veya hedef abonelik için operatör ayrıcalıklarına sahip olmanız gerekir. Ayrıntılar için bkz. 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);

Aboneliği değiştir (herkese açık)

Belirtilen aboneliğe geçer (etkinleştirir). Arayan kişi WRITE_EMBEDDED_SUBSCRIPTIONS veya mevcut için operatör ayrıcalıklarına sahip olun etkin aboneliği ve hedef aboneliği seçin. Ayrıntılar için bkz. 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);

Aboneliği bağlantı noktasıyla değiştir (herkese açık)

(Android 13'ten itibaren kullanılabilir) Şu cihaza geçer: (etkinleştirir) bağlantı noktası diziniyle belirtilen abonelik için geçerlidir. Arayanın operatörü WRITE_EMBEDDED_SUBSCRIPTIONS veya operatörü olmalıdır ayrıcalıkları da belirleyebilirsiniz. Ayrıntılar için bkz. 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);

SIM bağlantı noktası kullanılabilir mi (herkese açık)

public boolean isSimPortAvailable(int portIndex)

(Android 13'ten itibaren kullanılabilir) bağlantı noktası dizininin mevcut olup olmadığını kontrol edin. Bağlantı noktası varsa aboneliğin etkin olmaması veya arayan uygulamanın aboneliğin seçilen bağlantı noktasında yüklü olması gerekir. Ayrıntılar için bkz. isSimPortAvailable.

Aboneliği sil (herkese açık)

Abonelik kimliği bulunan bir aboneliği siler. Abonelik şu anda ve etkinse ilk olarak devre dışı bırakılır. Arayan kişi şunlardan birine sahip olmalıdır: Hedef için WRITE_EMBEDDED_SUBSCRIPTIONS veya operatör ayrıcalıkları abonelik. Ayrıntılar için bkz. 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);

Tüm abonelikleri sil (system API)

Cihazdaki tüm abonelikleri siler. Android'de başlatılıyor 11 kullanıyorsanız bir EuiccCardManager#ResetOption sağlamanız gerekir tüm test, işlem veya her ikisinin de silinip silinmeyeceğini belirtmek için aboneliklerdir. Arayanın WRITE_EMBEDDED_SUBSCRIPTIONS izni olmalıdır.

// 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);

Çözüm etkinliği başlatma (herkese açık)

Kullanıcı tarafından çözülebilir bir hatayı düzeltmek için bir etkinlik başlatır. Bir işlem EuiccManager#EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR, bu yöntem kullanıcıdan sorunu çözmesini istemek için çağrı yapılır. Bu yöntem yalnızca bir kez gönderin.

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

Sabitler

EuiccManager öğesindeki public sabit değerlerinin listesini görmek için bkz. Sabit değerler.