Operatör yapılandırması

Android 6.0 ve sonraki sürümlerde, ayrıcalıklı uygulamaların platforma operatöre özel yapılandırma sağlamasına olanak tanıyan bir özellik bulunur. Android 5.1'de (Lollipop MR1) kullanıma sunulan UICC operatör ayrıcalıklarına dayalı bu işlev, operatör yapılandırmasının statik yapılandırma katmanlarından uzaklaştırılmasına olanak tanır. Ayrıca, operatörlere ve OEM'lere tanımlı bir arayüz aracılığıyla platforma dinamik olarak operatör yapılandırması sağlama imkanı verir.

Düzgün şekilde imzalanmış bir operatör uygulaması, sistem görüntüsüne önceden yüklenebilir, otomatik olarak yüklenebilir veya uygulama mağazası üzerinden manuel olarak yüklenebilir. Uygulama, aşağıdaki ayarların yapılandırmasını sağlamak için platform tarafından sorgulanır:

  • Dolaşım/dolaşım dışı ağlar
  • Görsel sesli mesaj
  • SMS/MMS ağ ayarları
  • VoLTE/IMS yapılandırmaları

Hangi değerlerin döndürüleceğine karar verme işlemi tamamen operatör uygulamasına bağlıdır ve platform üzerinden uygulamaya iletilen ayrıntılı bilgilere göre dinamik olabilir.

Bu yaklaşımın temel avantajları şunlardır:

  • Dinamik yapılandırma: MCCMNC'den türetilmeyen yapılandırma gibi kavramlar desteklenir. Örneğin, mobil sanal ağ operatörleri (MVNO'lar) veya müşterilerin ek hizmetleri etkinleştirmesi.
  • Herhangi bir kanal üzerinden satılan cihazlar için destek: Örneğin, açık pazarda satılan bir telefon, uygulama mağazasından bir uygulama indirilerek doğru ayarlarla otomatik olarak yapılandırılabilir.
  • Güvenlik: Bu yapılandırmayı sağlama ayrıcalığı yalnızca operatör tarafından imzalanan uygulamalara verilir.
  • Tanımlanmış API: Bu yapılandırma daha önce çoğunlukla çerçeve içindeki dahili XML katmanlarında depolanıyordu ve herkese açık bir API üzerinden depolanmıyordu. Android 6.0'daki operatör yapılandırma API'si herkese açıktır ve iyi tanımlanmıştır.

İşleyiş şekli

Yapılandırmayı yükleme

Bu özellik tarafından sağlanan operatör yapılandırması, platformdaki çeşitli telefon görüşmesiyle ilgili davranışları değiştiren bir anahtar/değer çiftleri kümesidir.

Belirli bir cihaza ait değerler kümesi, aşağıdaki bileşenlere sırayla sorgu gönderilerek belirlenir:

  1. Operatör uygulaması (Bu isteğe bağlıdır ancak Android Açık Kaynak Projesi'nde (AOSP) bulunanların dışında ek yapılandırma için önerilen konumdur.)
  2. Sistem görüntüsüyle birlikte gelen platform yapılandırma uygulaması
  3. Çerçeveye sabit kodlanmış varsayılan değerler (Android 6.0'dan önceki davranışa eşdeğer)

Platform yapılandırma uygulaması

Sistem görüntüsünde genel bir platform yapılandırma uygulaması bulunur. Bu uygulama, normal operatör uygulamasının sağlayamadığı değişkenler için değerler sağlayabilir. Platform yapılandırma uygulaması (Android 6.0'da) şu konumda bulunur: packages/apps/CarrierConfig

Bu uygulamanın amacı, operatör uygulaması yüklü olmadığında ağ başına yapılandırma sağlamaktır. Operatörler/OEM'ler, kendi görüntülerinde bu uygulamada yalnızca minimum düzeyde değişiklik yapmalıdır. Bunun yerine operatörler, operatör özelleştirmesi için ayrı bir operatör uygulaması sağlamalı ve güncellemelerin uygulama mağazaları gibi kanallar aracılığıyla dağıtılmasına izin vermelidir.

Operatör uygulamasına ayrıcalık verme

Söz konusu operatör uygulaması, UICC Operatör Ayrıcalıkları'nda belirtildiği gibi SIM kartta bulunan sertifikayla imzalanmalıdır.

Operatör uygulamasına hangi bilgiler aktarılır?

Operatör uygulamasına aşağıdaki değerler sağlanır. Bu değerler, döndürülecek değerler konusunda dinamik bir karar vermesini sağlar:

  • MCC
  • MNC
  • SPN
  • IMSI
  • GID1
  • GID2
  • Operatör Kimliği

Kargo şirketi kimliklerini entegre etme hakkında daha fazla bilgi için bkz. Kargo şirketi kimliklerini CarrierConfig ile entegre etme.

Operatör yapılandırması yüklenirken

Anahtar/değer çiftleri listesi oluşturulurken:

  • SIM yüklendiğinde (önyükleme veya SIM'i sıcak değiştirme)
  • Operatör uygulaması, yeniden yüklemeyi manuel olarak tetiklediğinde
  • Operatör uygulaması güncellendiğinde

Daha fazla bilgi için android.service.carrier.CarrierService#onLoadConfig() referansına bakın.

Yapılandırmayı kullanma

Yapılandırma oluşturulduğunda, sistem yapılandırmasının çeşitli değerlerini ayarlamak için yapılandırmada yer alan değerler kullanılır. Bu değerler şunlardır:

  • Dahili çerçeve telefon ayarları
  • SDK tarafından döndürülen yapılandırma değerleri (ör. SmsManager'da)
  • Çevirici'deki görsel sesli mesaj bağlantı değerleri gibi uygulama ayarları

Yapılandırma anahtarları

Anahtar listesi, android.telephony.CarrierConfigManager içindeki genel SDK'nın bir parçası olarak tanımlanır ve aynı API düzeyinde değiştirilemez. Tuşların özetini aşağıdaki tabloda görebilirsiniz.

Uygulamayı oluşturma

Uygulamayı oluşturma

Uygulamanız, Android 6.0 API düzeyini (23) hedeflemelidir.

android.service.carrier.CarrierService'i geçersiz kılan bir sınıf bildirin.

  1. onLoadConfig değerini geçersiz kılarak service.carrier.CarrierIdentifier nesnesine göre sağlamak istediğiniz değerleri döndürün.
  2. Operatör yapılandırmasının zaman içinde değişebileceği senaryolarda (ör. kullanıcı hesabına ek hizmetler eklediğinde) notifyConfigChangedForSubId işlevini çağırmak için mantık ekleyin.

Aşağıda bir örnek verilmiştir:

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;
    }
}

Daha fazla bilgi için android.service.carrier.CarrierService referansına bakın.

Bildiride sınıfı adlandırma

Aşağıda bir örnek verilmiştir:

<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>

Uygulamayı SIM'deki aynı sertifikayla imzalayın.

Koşullar için UICC Operatör Ayrıcalıkları başlıklı makaleyi inceleyin.

Operatör uygulamasıyla APN ekleme

Bir operatör uygulamasından (ör. SIM etkinleştirme sırasında) APN'leri programatik olarak eklemek için ContentResolver API'lerini kullanarak URI ile tanımlanan bir içerik sağlayıcıya APN öğeleri ekleyin android.provider.Telephony.Carriers.CONTENT_URI. İçerik URI'sinin tablo yapısı hakkında daha fazla bilgi için Telephony.Carriers bölümüne bakın.

Daha fazla bilgi için APN ve CarrierConfig başlıklı makaleyi inceleyin.

Uygulamayı test et

Yapılandırma uygulamanızı oluşturduktan sonra kodunuzu aşağıdakilerle test edebilirsiniz:

  • Geçerli bir sertifika imzası içeren SIM
  • Android 6.0 ve sonraki sürümleri çalıştıran bir cihaz (ör. Android cihaz)

Kargo hizmeti özelliklerini ayarlama

Android'de operatör hizmeti özellikleri, ses, mesajlaşma ve veri hizmetlerinin bir cihazda desteklenip desteklenmediğini açıklar. Operatörler, bir cihazın operatör hizmeti özelliklerini cihaz düzeyinde ve abonelik düzeyinde belirtebilir (Android 15 veya sonraki sürümler).

Cihaz düzeyinde hizmet özellikleri

Cihaz düzeyindeki hizmet özellikleri, cihaz üretilirken yapılandırılır (üretimden sonra değiştirilemez). Operatörler, aşağıdaki sistem kaynağı geçersiz kılmaları aracılığıyla cihaz düzeyindeki özellikleri belirtebilir:

Uygulamalar, aşağıdaki API'ler aracılığıyla cihaz düzeyindeki hizmet özelliklerini sorgulayabilir:

Abonelik düzeyinde hizmet özellikleri

Android 15 veya sonraki sürümlerin yüklü olduğu cihazlarda operatörler, abonelik düzeyinde cihazın hizmet özelliklerini belirtebilir. Abonelik düzeyinde hizmet özelliklerini belirtmek için CarrierConfigManager.KEY_CELLULAR_SERVICE_CAPABILITIES_INT_ARRAY API'sini kullanın. Örneğin, bir aboneliğin yalnızca veri aboneliği olduğunu belirtmek için değeri SubscriptionManager#SERVICE_CAPABILITY_DATA olarak ayarlayın.

Uygulamalar (önceden yüklenmiş sistem uygulamaları ve üçüncü taraf uygulamaları), SubscriptionInfo.getServiceCapabilities() yöntemiyle belirli bir abonelik için operatör hizmeti özelliklerini sorgulayabilir. Bu sayede uygulama geliştiriciler, abonelik için kullanılabilen özelliklere göre uygulamaların kullanıcı deneyimini özelleştirebilir. Örneğin, uygulama geliştiriciler, kullanıcı yalnızca veri aboneliği kullanıyorsa arama uygulamasının arama yapmasına izin vermemesini sağlayabilir.

Kullanımdan kaldırılan hizmet özellikleri API'leri

Android 15'ten itibaren Android, hem cihaz düzeyinde hem de abonelik düzeyinde hizmet özellikleri sunar. Bu değişiklik nedeniyle, mevcut cihaz düzeyindeki özellik API'leri daha iyi okunabilmesi için yeniden adlandırıldı. Aşağıdaki tabloda, desteği sonlandırılan API'ler ve Android 15'te kullanıma sunulan, yeniden adlandırılmış API'ler listelenmektedir:

Kullanımdan kaldırıldı (Android 14 veya önceki sürümler) Eşdeğer (Android 15 veya sonraki sürümler)
TelephonyManager.isVoiceCapable() TelephonyManager.isDeviceVoiceCapable()
TelephonyManager.isSmsCapable() TelephonyManager.isDeviceSmsCapable()