Taşıyıcı Yapılandırması

Android 6.0 ve üzeri, ayrıcalıklı uygulamaların platforma operatöre özel yapılandırma sağlamasına yönelik bir yetenek içerir. Android 5.1'de (Lollipop MR1) sunulan UICC Taşıyıcı Ayrıcalıklarını temel alan bu işlevsellik, taşıyıcı yapılandırmasının statik yapılandırma katmanlarından uzaklaştırılmasına olanak tanır ve taşıyıcılara ve OEM'lere, tanımlı bir arayüz aracılığıyla platforma taşıyıcı yapılandırmasını dinamik olarak sağlama yeteneği 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ı aracılığıyla manuel olarak yüklenebilir. Uygulama, aşağıdakiler de dahil olmak üzere ayarlar için yapılandırma sağlamak amacıyla platform tarafından sorgulanır:

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

Hangi değerlerin döndürüleceğinin belirlenmesi tamamen operatör uygulamasına bağlıdır ve platform aracılığıyla uygulamaya iletilen ayrıntılı bilgilere dayalı olarak dinamik olabilir.

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

  • Dinamik yapılandırma - Mobil sanal ağ operatörleri (MVNO'lar) veya müşterinin ekstra hizmetlere katılımı gibi MCCMNC'den türetilmemiş yapılandırma gibi kavramlar için destek.
  • Herhangi bir kanal üzerinden satılan cihazlar için destek - Örneğin, açık pazardaki bir telefon, bir uygulama mağazasından bir uygulama indirilerek otomatik olarak doğru ayarlarla yapılandırılabilir.
  • Güvenlik - Bu yapılandırmayı sağlama ayrıcalığı yalnızca operatör tarafından imzalanan uygulamalara verilir.
  • Tanımlı API - Daha önce bu yapılandırma, genel bir API aracılığıyla değil, çoğunlukla çerçeve içindeki dahili XML katmanlarında saklanıyordu. Android 6.0'daki taşıyıcı yapılandırma API'si herkese açıktır ve iyi tanımlanmıştır.

Nasıl çalışır

Yapılandırma yükleniyor

Bu özellik tarafından sağlanan taşıyıcı yapılandırması, platformdaki telefonla ilgili çeşitli davranışları değiştiren bir dizi anahtar/değer çiftinden oluşur.

Belirli bir cihazın değer kümesi, aşağıdaki bileşenlerin sırayla sorgulanmasıyla belirlenir:

  1. Operatör uygulaması (bu 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 verilen platform yapılandırma uygulaması
  3. Çerçeveye sabit kodlanmış varsayılan değerler (Android 6.0 öncesi davranışa eşdeğer)

Platform yapılandırma uygulaması

Genel bir platform yapılandırma uygulaması, sistem görüntüsüyle birlikte gelir. Bu uygulama, normal operatör uygulamasının sağlamadığı tüm değişkenler için değer sağlayabilir. Platform yapılandırma uygulaması (Android 6.0'da) şurada bulunabilir: packages/apps/CarrierConfig

Bu uygulamanın amacı, bir operatör uygulaması yüklü olmadığında ağ başına bazı yapılandırmalar sağlamaktır ve operatörlerin/OEM'lerin kendi görsellerinde bu uygulama üzerinde yalnızca minimum düzeyde değişiklik yapması gerekir. Bunun yerine operatörlerin, operatör özelleştirmesi için ayrı bir operatör uygulaması sunması ve güncellemelerin uygulama mağazaları gibi yollardan dağıtılmasına izin vermesi gerekiyor.

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

Söz konusu operatör uygulamasının , UICC Operatör Ayrıcalıkları'nda belgelendiği gibi, SIM kartta bulunan sertifikayla aynı şekilde imzalanması gerekir.

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

Taşıyıcı uygulaması, hangi değerlerin döndürüleceği konusunda dinamik bir karar vermesine olanak tanıyan aşağıdaki değerlerle sağlanır:

  • MM
  • Çokuluslu şirket
  • SPN
  • IMSI
  • GID1
  • GID2
  • Operatör Kimliği

Operatör kimliklerini entegre etme hakkında daha fazla bilgi için bkz. Operatör kimliklerini CarrierConfig ile entegre etme .

Taşıyıcı yapılandırmasını yüklerken oluşur

Anahtar değer çiftleri listesinin oluşturulması şu şekilde gerçekleşir:

  • SIM yüklendiğinde (önyükleme veya SIM çalışırken değiştirme)
  • Operatör uygulaması yeniden yükleme işlemini manuel olarak tetiklediğinde
  • Operatör uygulaması güncellendiğinde

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

Yapılandırmayı kullanma

Konfigürasyon oluşturulduğunda, içindeki değerler aşağıdakiler de dahil olmak üzere sistem konfigürasyonunun çeşitli değerlerini ayarlamak için kullanılır:

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

Yapılandırma tuşları

Anahtar listesi, android.telephony.CarrierConfigManager genel SDK'nın parçası olarak tanımlanır ve aynı API düzeyinde değiştirilemez. Anahtarların özeti için aşağıdaki tabloya bakın.

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 bildirmek

  1. Geçirilen service.carrier.CarrierIdentifier nesnesine göre sağlamak istediğiniz değerleri döndürmek için onLoadConfig geçersiz kılın.
  2. Operatör yapılandırmasının zaman içinde değişebileceği senaryolarda (örneğin, kullanıcı hesabına ekstra hizmetler eklediğinde) notifyConfigChangedForSubId çağrısına mantık ekleyin.

Bir örnek aşağıdadır:

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 ayrıntı için android.service.carrier.CarrierService referansına bakın.

Manifest'te sınıfı adlandırma

Bir örnek aşağıdadır:

<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'de aynı sertifikayla imzalama

Gereksinimler için UICC Taşıyıcı Ayrıcalıklarına bakın.

Operatör uygulamasıyla APN'ler ekleme

APN'leri bir operatör uygulamasından programlı olarak eklemek için (örneğin, SIM etkinleştirme sırasında), APN öğelerini android.provider.Telephony.Carriers.CONTENT_URI URI'si tarafından tanımlanan bir içerik sağlayıcıya eklemek için ContentResolver API'lerini kullanın. İçerik URI'sine ilişkin tablo yapısı hakkında daha fazla bilgi için bkz. Telephony.Carriers .

Daha fazla bilgi için APN ve CarrierConfig'e bakın.

Uygulamayı test etme

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

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