Operatör yapılandırması

Android 6.0 ve sonraki sürümler, platforma operatöre özel yapılandırma sağlamak için ayrıcalıklı uygulamalar sunma özelliğine sahiptir. 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 yer paylaşımlarından kaldırılmasına olanak tanır ve operatörlere ile OEM'lere, tanımlanmış bir arayüz aracılığıyla platforma operatör yapılandırmasını dinamik olarak sağlama olanağı verir.

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

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

Hangi değerlerin döndürüleceğini belirleme 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 başlıca avantajları şunlardır:

  • Dinamik yapılandırma: MCCMNC'den türetilmeyen yapılandırma (ör. mobil sanal ağ operatörleri (MVNO'lar) veya müşterinin ekstra hizmetleri etkinleştirmesi) gibi kavramlar için destek.
  • Herhangi bir kanal üzerinden satılan cihazlar için destek: Örneğin, açık pazardaki bir telefon, uygulama mağazasından bir uygulama indirerek 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: Daha önce bu yapılandırma, herkese açık bir API üzerinden değil, çoğunlukla çerçeve içindeki dahili XML yer paylaşımlarında depolanı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ükle

Bu özelliğin sağladığı operatör yapılandırması, platformdaki telefonla ilgili çeşitli davranışları değiştiren bir anahtar/değer çiftleri grubudur.

Belirli bir cihaza ait değer grubu, aşağıdaki bileşenler sırayla sorgulanarak belirlenir:

  1. Operatör uygulaması (isteğe bağlıdır ancak Android Açık Kaynak Projesi'nde (AOSP) mevcut olanın ötesinde ek yapılandırma için önerilen konumdur)
  2. Sistem görüntüsüyle birlikte paketlenen 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üyle birlikte genel bir platform yapılandırma uygulaması bulunur. Bu uygulama, normal operatör uygulamasının sağlamadığı tüm değişkenler için değer sağlayabilir. Platform yapılandırması uygulaması (Android 6.0'da) şurada bulunabilir: packages/apps/CarrierConfig

Bu uygulamanın amacı, operatör uygulaması yüklenmemişken ağ başına bazı yapılandırmalar sağlamaktır. Operatörler/OEM'ler kendi resimlerinde bu uygulamada yalnızca minimum düzeyde değişiklik yapmalıdır. Operatörler bunun yerine, operatör özelleştirmesi için ayrı operatör uygulaması sunmalı ve güncellemelerin uygulama mağazaları gibi yerler üzerinden dağıtılmasına izin vermelidir.

Operatör uygulamasına ayrıcalık nasıl verilir?

Söz konusu operatör uygulaması, UICC Operatör Ayrıcalıkları bölümünde belirtildiği gibi SIM kartta bulunan sertifikayla imzalanmalıdır.

Operatör uygulamasına hangi bilgiler iletilir?

Operatör uygulamasına aşağıdaki değerler sağlanır. Bu değerler, hangi değerleri döndüreceğine dair dinamik bir karar vermesini sağlar:

  • MCC
  • MNC
  • SPN
  • IMSI
  • GRID1
  • GID2
  • Operatör kimliği

Operatör kimliklerini entegre etme hakkında daha fazla bilgi için Operatör kimliklerini CarrierConfig ile entegre etme başlıklı makaleyi inceleyin.

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

Anahtar/değer çiftleri listesi şu şekilde oluşturulur:

  • SIM yüklendiğinde (açılış veya SIM sıcak değişimi)
  • Operatör uygulaması manuel olarak yeniden yüklemeyi tetiklediğinde
  • Operatör uygulaması güncellendiğinde

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

Yapılandırmayı kullanma

Yapılandırma oluşturulduğunda, yapılandırmanın içerdiği değerler, aşağıdakiler dahil çeşitli sistem yapılandırması değerlerini belirlemek için kullanılır:

  • Dahili çerçeve telefon ayarları
  • Örneğin, SmsManager'da SDK tarafından döndürülen yapılandırma değerleri
  • Arama uygulamasındaki VVM bağlantı değerleri gibi uygulama ayarları

Yapılandırma anahtarları

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

Uygulamayı oluşturma

Uygulamayı oluşturun

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

android.service.carrier.CarrierService sınıfını geçersiz kılan bir sınıf tanımlayın.

  1. Geçilen service.carrier.CarrierIdentifier nesnesine göre sağlamak istediğiniz değerleri döndürmek için onLoadConfig öğesini geçersiz kılı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 çağrısı 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.

Manifest'te sınıfı adlandırın.

Aşağıda bununla ilgili 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 imzalama

Koşullar için UICC Operatör Ayrıcalıkları başlıklı makaleye bakın.

Operatör uygulamasıyla APN ekleme

Bir operatör uygulamasından programatik olarak APN'ler eklemek için (örneğin, SIM etkinleştirme sırasında) ContentResolver API'lerini kullanarak URI ile tanımlanan 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'i inceleyin.

Uygulamayı test et

Yapılandırma uygulamanızı oluşturduğunuzda aşağıdakilerle kodunuzu test edebilirsiniz:

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

Operatör hizmeti özelliklerini ayarlama

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

Cihaz düzeyinde hizmet özellikleri

Cihaz düzeyinde hizmet özellikleri, cihaz üretildiğinde yapılandırılır (üretimden sonra değiştirilemez). Operatörler, aşağıdaki sistem kaynağı geçersiz kılmalarını kullanarak cihaz düzeyinde ö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ümleri çalıştıran cihazlarda operatörler, cihazın abonelik düzeyindeki servis özelliklerini belirtebilir. Abonelik düzeyinde hizmet özelliklerini belirtmek için CarrierConfigManager.KEY_CELLULAR_SERVICE_CAPABILITIES_INT_ARRAY API'yi kullanın. Örneğin, bir aboneliğin yalnızca veri içerdiğini belirtmek için değeri SubscriptionManager#SERVICE_CAPABILITY_DATA olarak ayarlayın.

Uygulamalar (önceden yüklenmiş sistem uygulamaları ve üçüncü taraf uygulamaları), belirli bir abonelik için operatör hizmeti özelliklerini SubscriptionInfo.getServiceCapabilities() yöntemi aracılığıyla sorgulayabilir. Bu sayede uygulama geliştiriciler, abonelik için mevcut özelliklere göre uygulamaların kullanıcı deneyimini özelleştirebilir. Örneğin, uygulama geliştiriciler, kullanıcının yalnızca veri aboneliği varsa numara çevirici uygulamasının arama yapılmasına izin vermediğinden emin olabilirler.

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

Android, Android 15 sürümünden itibaren hem cihaz düzeyinde hem de abonelik düzeyinde hizmet özellikleri sunar. Bu değişiklik nedeniyle, mevcut cihaz düzeyindeki özellik API'leri okunabilirliği iyileştirmek için yeniden adlandırıldı. Aşağıdaki tabloda, desteği sonlandırılmış API'ler ve Android 15'te kullanıma sunulan yeniden adlandırılmış API'ler listelenmiştir:

Desteği sonlandı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()