Konfiguracja przewoźnika

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Android 6.0 i nowsze zawierają możliwość uprzywilejowanych aplikacji w celu zapewnienia konfiguracji specyficznej dla operatora na platformie. Ta funkcjonalność, oparta na uprawnieniach przewoźnika UICC wprowadzonych w systemie Android 5.1 (Lollipop MR1), umożliwia odsunięcie konfiguracji operatora od nakładek konfiguracji statycznej i daje operatorom i producentom OEM możliwość dynamicznego dostarczania konfiguracji operatora do platformy za pośrednictwem zdefiniowanego interfejsu.

Prawidłowo podpisana aplikacja operatora może być wstępnie załadowana do obrazu systemu, zainstalowana automatycznie lub ręcznie zainstalowana za pośrednictwem sklepu z aplikacjami. Platforma wysyła do aplikacji zapytania o konfigurację ustawień, w tym:

  • Sieci roamingowe/bez roamingu
  • Wizualna poczta głosowa
  • Ustawienia sieci SMS/MMS
  • Konfiguracje VoLTE/IMS

Określenie, jakie wartości mają zostać zwrócone, zależy wyłącznie od aplikacji przewoźnika i może być dynamiczne na podstawie szczegółowych informacji przekazywanych do aplikacji za pośrednictwem platformy.

Kluczowe zalety tego podejścia to:

  • Konfiguracja dynamiczna — obsługa takich koncepcji, jak konfiguracja niepochodząca z MCCMNC, na przykład operatorzy wirtualnych sieci komórkowych (MVNO) lub klienci decydują się na dodatkowe usługi.
  • Obsługa urządzeń sprzedawanych za pośrednictwem dowolnego kanału — na przykład telefon z otwartego rynku można automatycznie skonfigurować z odpowiednimi ustawieniami, pobierając aplikację ze sklepu z aplikacjami.
  • Bezpieczeństwo — uprawnienia do udostępniania tej konfiguracji są przyznawane tylko aplikacjom podpisanym przez operatora.
  • Zdefiniowany interfejs API — wcześniej ta konfiguracja była przechowywana głównie w wewnętrznych nakładkach XML w ramach struktury, 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 określany przez odpytywanie następujących komponentów w kolejności:

  1. Aplikacja operatora (jest to opcjonalne, ale jest to zalecana lokalizacja dla dodatkowej konfiguracji poza tym, co 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 sztywno w strukturze (odpowiednik zachowania sprzed Androida 6.0)

Aplikacja do konfiguracji platformy

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

Celem tej aplikacji jest zapewnienie pewnej konfiguracji sieciowej, gdy aplikacja operatora nie jest zainstalowana, a operatorzy/producenci OEM powinni wprowadzać tylko minimalne zmiany we własnych obrazach. Zamiast tego przewoźnicy powinni udostępnić osobną aplikację operatora do dostosowywania operatora, umożliwiającą dystrybucję aktualizacji za pośrednictwem takich dróg, jak sklepy z aplikacjami.

Jak uprawnienia są przyznawane aplikacji operatora

Dana aplikacja przewoźnika musi być podpisana tym samym certyfikatem, który znajduje się na karcie SIM, co zostało udokumentowane w uprawnieniach przewoźnika UICC .

Jakie informacje są przekazywane do aplikacji przewoźnika

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

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

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

Podczas ładowania konfiguracji przewoźnika występuje

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

  • Gdy karta SIM jest załadowana (rozruch lub wymiana karty SIM na gorąco)
  • Gdy aplikacja przewoźnika ręcznie uruchomi przeładowanie
  • Gdy aplikacja operatora zostanie zaktualizowana

Więcej informacji można znaleźć w dokumentacji android.service.carrier.CarrierService#onLoadConfig() .

Korzystanie z konfiguracji

Gdy konfiguracja jest budowana, wartości w niej zawarte służą do ustawiania różnych wartości konfiguracji systemu, w tym:

  • Wewnętrzne ustawienia telefonii szkieletowej
  • Zwracane przez SDK wartości konfiguracyjne, na przykład w SmsManager
  • Ustawienia aplikacji, takie jak wartości połączenia VVM w Dialer

Klawisze konfiguracyjne

Lista kluczy jest zdefiniowana jako część publicznego zestawu SDK w android.telephony.CarrierConfigManager i nie można jej zmieniać na tym samym poziomie interfejsu API. Poniższa tabela zawiera zestawienie kluczy.

Budowanie aplikacji

Tworzenie aplikacji

Twoja aplikacja musi być kierowana na poziom interfejsu API Androida 6.0 (23).

Deklarowanie klasy, która nadpisuje 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ływać notifyConfigChangedForSubId w scenariuszach, w których konfiguracja operatora może się zmieniać 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;
    }
}

Więcej informacji można znaleźć w dokumentacji 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 SIM

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

Dodawanie APN za pomocą aplikacji operatora

Aby programowo dodać APN z aplikacji operatora (na przykład podczas aktywacji karty SIM), użyj interfejsów API ContentResolver , aby dodać elementy APN do dostawcy zawartoś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 systemem Android