Konfiguracja przewoźnika

Android 6.0 i nowsze wersje umożliwiają aplikacjom uprzywilejowanym zapewnianie platformie konfiguracji specyficznej dla operatora. Ta funkcjonalność, oparta na uprawnieniach operatora UICC wprowadzonych w systemie Android 5.1 (Lollipop MR1), umożliwia odejście konfiguracji operatora od nakładek konfiguracji statycznej i daje operatorom i producentom OEM możliwość dynamicznego dostarczania konfiguracji operatora na platformę za pośrednictwem zdefiniowanego interfejsu.

Prawidłowo podpisana aplikacja operatora może zostać wstępnie załadowana w obrazie systemu, zainstalowana automatycznie lub zainstalowana ręcznie za pośrednictwem sklepu z aplikacjami. Aplikacja jest proszona przez platformę o zapewnienie konfiguracji ustawień, w tym:

  • Sieci roamingowe/nieroamingowe
  • Wizualna poczta głosowa
  • Ustawienia sieciowe SMS/MMS
  • Konfiguracje VoLTE/IMS

Określenie, jakie wartości mają zostać zwrócone, zależy wyłącznie od aplikacji operatora i może być dynamiczne w oparciu o szczegółowe informacje przekazywane do aplikacji za pośrednictwem platformy.

Najważniejsze zalety tego podejścia to:

  • Konfiguracja dynamiczna — obsługa koncepcji takich jak konfiguracja wywodząca się z technologii innej niż MCCMNC, na przykład operatorzy wirtualnych sieci komórkowych (MVNO) lub możliwość wyboru przez klienta dodatkowych usług.
  • Obsługa urządzeń sprzedawanych dowolnym kanałem — na przykład telefon z otwartym rynkiem może zostać automatycznie skonfigurowany z odpowiednimi ustawieniami, pobierając aplikację ze sklepu z aplikacjami.
  • Bezpieczeństwo – uprawnienia do udostępniania tej konfiguracji mają tylko aplikacje podpisane przez operatora.
  • Zdefiniowany interfejs API — poprzednio ta konfiguracja była przechowywana głównie w wewnętrznych nakładkach XML w ramach platformy, a nie za pośrednictwem publicznego interfejsu API. Interfejs API konfiguracji operatora w systemie Android 6.0 jest publiczny i dobrze zdefiniowany.

Jak to działa

Ładowanie konfiguracji

Konfiguracja operatora dostarczana przez tę funkcję to zestaw par klucz-wartość, które zmieniają różne zachowania związane z telefonią na platformie.

Zbiór wartości dla konkretnego urządzenia jest ustalany poprzez odpytanie w kolejności następujących komponentów:

  1. Aplikacja operatora (jest to opcjonalna, ale jest to zalecana lokalizacja dodatkowej konfiguracji wykraczającej poza tę, która istnieje w projekcie Android Open Source Project (AOSP))
  2. Aplikacja do konfiguracji platformy dołączona do obrazu systemu
  3. Wartości domyślne, zakodowane na stałe w frameworku (równoważne zachowaniu przed Androidem 6.0)

Aplikacja do konfiguracji platformy

Do obrazu systemu dołączona jest ogólna aplikacja do konfiguracji platformy. Ta aplikacja może dostarczać wartości dowolnych zmiennych, których nie udostępnia zwykła aplikacja operatora. Aplikację do konfiguracji platformy można znaleźć (w systemie Android 6.0) w: packages/apps/CarrierConfig

Celem tej aplikacji jest zapewnienie konfiguracji dla poszczególnych sieci, gdy aplikacja operatora nie jest zainstalowana, a przewoźnicy/producenci OEM powinni wprowadzać jedynie minimalne zmiany w swoich własnych obrazach. Zamiast tego przewoźnicy powinni udostępnić oddzielną aplikację operatora, umożliwiającą personalizację operatora, umożliwiając dystrybucję aktualizacji za pośrednictwem takich kanałów, jak sklepy z aplikacjami.

Jak uprawnienia są przyznawane aplikacji operatora

Dana aplikacja operatora musi być podpisana tym samym certyfikatem, który znajduje się na karcie SIM, zgodnie z dokumentacją dotyczącą uprawnień operatora UICC .

Jakie informacje są przekazywane do aplikacji operatora

Aplikacja operatora jest dostarczana z następującymi wartościami, dzięki czemu może podejmować dynamiczną decyzję, jakie wartości zwrócić:

  • MCC
  • MNC
  • SPN
  • IMSI
  • GID1
  • GID2
  • Identyfikator przewoźnika

Aby uzyskać więcej informacji na temat integrowania identyfikatorów przewoźników, zobacz Integrowanie identyfikatorów przewoźników z CarrierConfig .

Podczas ładowania następuje konfiguracja przewoźnika

Budowanie listy par klucz-wartość następuje:

  • Po załadowaniu karty SIM (rozruch lub wymiana karty SIM podczas pracy)
  • Gdy aplikacja operatora ręcznie uruchamia ponowne ładowanie
  • Gdy aplikacja operatora zostanie zaktualizowana

Więcej szczegółów znajdziesz w dokumentacji android.service.carrier.CarrierService#onLoadConfig() .

Korzystanie z konfiguracji

Po zbudowaniu konfiguracji wartości w niej zawarte służą do ustawienia różnych wartości konfiguracji systemu, w tym:

  • Wewnętrzne ramy ustawień telefonicznych
  • Wartości konfiguracyjne zwrócone przez SDK, na przykład w SmsManager
  • Ustawienia aplikacji, takie jak wartości połączenia VVM w Dialerze

Klucze konfiguracyjne

Lista kluczy jest zdefiniowana jako część publicznego zestawu SDK w android.telephony.CarrierConfigManager i nie można jej zmieniać w ramach tego samego poziomu API. W poniższej tabeli znajdziesz podsumowanie kluczy.

Tworzenie aplikacji

Tworzenie aplikacji

Twoja aplikacja musi być dostosowana do poziomu API systemu Android 6.0 (23).

Deklarowanie klasy, która zastępuje android.service.carrier.CarrierService

  1. Zastąp onLoadConfig aby zwrócić wartości, które chcesz podać na podstawie przekazanego obiektu service.carrier.CarrierIdentifier .
  2. Dodaj logikę, aby wywołać notifyConfigChangedForSubId w scenariuszach, w których konfiguracja operatora może zmieniać się w czasie (na przykład gdy użytkownik doda dodatkowe usługi do swojego konta).

Przykład znajduje się poniżej:

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

Aby uzyskać więcej informacji, zobacz dokumentację android.service.carrier.CarrierService .

Nazywanie klasy w manifeście

Przykład znajduje się poniżej:

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

Podpisanie aplikacji tym samym certyfikatem na karcie SIM

Aby zapoznać się z wymaganiami, zobacz uprawnienia przewoźnika UICC .

Dodawanie APN za pomocą aplikacji operatora

Aby programowo dodać nazwy APN z aplikacji operatora (na przykład podczas aktywacji karty SIM), użyj interfejsów API ContentResolver w celu dodania elementów APN do dostawcy treści identyfikowanego przez identyfikator URI android.provider.Telephony.Carriers.CONTENT_URI . Aby uzyskać więcej informacji na temat struktury tabeli dla identyfikatora URI zawartości, zobacz Telephony.Carriers .

Aby uzyskać więcej informacji, zobacz APN i CarrierConfig .

Testowanie aplikacji

Po zbudowaniu aplikacji konfiguracyjnej możesz przetestować swój kod za pomocą:

  • Karta SIM zawierająca ważny podpis certyfikatu
  • Urządzenie z systemem Android 6.0 lub nowszym, na przykład urządzenie z Androidem