Konfiguracja operatora

W Androidzie 6.0 i nowszych jest funkcja aby zapewnić na platformie konfigurację specyficzną dla operatora. Ten funkcji opartych na uprawnieniach operatora UICC. wprowadzonych w Androidzie 5.1 (Lollipop MR1) umożliwia operatorowi konfiguracji można odsunąć od nakładek konfiguracji statycznej, co zapewnia możliwość dynamicznego dostarczania konfiguracji operatora platformy za pomocą zdefiniowanego interfejsu.

Prawidłowo podpisana aplikacja operatora może być wstępnie wczytana w obrazie systemu, instalowane automatycznie lub ręcznie ze sklepu z aplikacjami. Aplikacja jest wysyłane przez platformę w celu udostępnienia konfiguracji ustawień w tym:

  • Sieci w roamingu/inne niż roaming
  • Wizualna poczta głosowa
  • Ustawienia sieci dla SMS-ów/MMS-ów
  • Konfiguracje VoLTE/IMS
.

To, jakie wartości należy zwrócić, zależy wyłącznie od aplikacji operatora i może być dynamiczny na podstawie szczegółowych informacji przekazanych do aplikacji za pomocą platformy.

Najważniejsze zalety tego podejścia to:

  • Konfiguracja dynamiczna – obsługa pojęć takich jak: konfigurację pochodną spoza MCKMNC, na przykład operatorzy komórkowych sieci wirtualnych lub klienci decydują się na korzystanie z usług dodatkowych.
  • Obsługa urządzeń sprzedawanych w dowolnym kanale – np. telefon na rynku otwartym można automatycznie skonfigurować pobierając aplikację ze sklepu z aplikacjami.
  • Zabezpieczenia – uprawnienie do udostępniania tej konfiguracji to 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 API. Interfejs API konfiguracji operatora w Androidzie 6.0 jest publiczny i dobrze zdefiniowany.

Jak to działa

Wczytywanie konfiguracji

Konfiguracja operatora udostępniana przez tę funkcję to zbiór par klucz-wartość które zmieniają różne zachowania związane z telefonami na platformie.

Zbiór wartości dla danego urządzenia jest określany na podstawie zapytania następujące komponenty w kolejności:

  1. aplikację operatora (jest to opcjonalne, ale zalecane, lokalizacja na potrzeby dodatkowej konfiguracji poza tą dostępną w Androidzie Open; Projekt źródłowy (AOSP)
  2. Aplikacja do konfiguracji platformy powiązana z obrazem systemu
  3. Wartości domyślne zakodowane na stałe w platformie (odpowiednik poprzedniego działania do Androida 6.0)
.

Aplikacja do konfiguracji platformy

Z obrazem systemu jest połączona aplikacja do ogólnej konfiguracji platformy. Ta aplikacja może dostarczyć wszystkich zmiennych, których nie ma w przypadku standardowej aplikacji operatora. Konfiguracja platformy aplikację można znaleźć (w Androidzie 6.0) w: packages/apps/CarrierConfig

Celem tej aplikacji jest zapewnianie pewnej konfiguracji dla poszczególnych sieci, gdy operator nie jest zainstalowana, a operatorzy/OEM powinni wprowadzić w niej nieznaczne zmiany na własnych obrazach. Zamiast tego operatorzy powinni udostępnić osobną aplikację operatora w celu dostosowania do operatora, co umożliwia rozpowszechnianie aktualizacji za pomocą takich kanałów jako sklepy z aplikacjami.

Sposób przyznawania uprawnień aplikacji operatora

Aplikacja operatora, której dotyczy zgłoszenie, musi być podpisana tym samym certyfikatem, który znajduje się na stronie kartę SIM, zgodnie z uprawnieniami operatora UICC.

Jakie informacje są przekazywane do aplikacji operatora

Aplikacja operatora jest dostarczana z tymi wartościami, co umożliwia jej utworzenie dynamiczną decyzję co do wartości do zwrócenia:

  • MCC
  • MNC
  • SPN
  • IMSI
  • Identyfikator GID1
  • Identyfikator GID2
  • Identyfikator operatora

Więcej informacji na temat integrowania identyfikatorów operatorów znajdziesz w artykule integrowanie identyfikatorów operatorów z CarrierConfig.

Podczas wczytywania konfiguracji operatora

Lista par klucz-wartość tworzy się:

  • Po załadowaniu karty SIM (uruchamianie lub zamiana karty SIM z pamięci)
  • Gdy aplikacja operatora ręcznie rozpoczyna ponowne załadowanie
  • Kiedy aplikacja operatora jest aktualizowana

Zobacz android.service.carrier.CarrierService#onLoadConfig() tutaj znajdziesz więcej informacji.

Użyj konfiguracji

Podczas tworzenia konfiguracji używane są zawarte w niej wartości do ustawienia różnych wartości konfiguracji systemu, w tym:

  • Ustawienia telefonii wewnętrznej
  • Wartości konfiguracyjne zwrócone przez SDK, np. w SmsManager
  • Ustawienia aplikacji, takie jak wartości połączeń VVM w Telefonie

Klucze konfiguracji

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

Utwórz aplikację

Tworzenie aplikacji

Aplikacja musi być kierowana na poziom API Androida 6.0 (23).

Zadeklaruj klasę, która zastępuje android.service.carrier.CarrierService

  1. Zastąp onLoadConfig, aby zwrócić odpowiednie wartości źródło na podstawie obiektu service.carrier.CarrierIdentifier zaliczono.
  2. Dodaj funkcje logiczne do wywoływania funkcji notifyConfigChangedForSubId w scenariuszach konfiguracja operatora może się z czasem zmieniać (na przykład gdy doda do swojego konta dodatkowe usługi).

Oto przykład:

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: android.service.carrier.CarrierService odwołania.

Nazwij klasę w pliku manifestu

Oto przykład:

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

Podpisz aplikację tym samym certyfikat na karcie SIM

Zobacz Uprawnienia operatora UICC dotyczące .

Dodaj punkty APN za pomocą aplikacji operatora

Aby automatycznie dodać punkty APN, używając aplikacji operatora (na przykład podczas korzystania z karty SIM) aktywacji), należy użyć funkcji Interfejsy API ContentResolver służące do dodawania elementów APN do dostawcy treści identyfikowane przez identyfikator URI . android.provider.Telephony.Carriers.CONTENT_URI Więcej informacji o strukturze tabeli dla identyfikatora URI treści znajdziesz w artykule Telephony.Carriers

Więcej informacji: APN i CarrierConfig

Wypróbuj aplikację

Gdy masz już aplikację konfiguracyjną, możesz przetestować jej kod z:

  • Karta SIM z prawidłowym podpisem certyfikatu
  • Urządzenie z Androidem 6.0 lub nowszym, na przykład urządzenie z Androidem

Określ możliwości usługi przewoźnika

Na Androidzie funkcje usług operatora opisują, czy funkcje głosowe, i usług danych. Operatorzy mogą określać przewoźnika możliwości usług dla urządzenia na poziomie urządzenia i na poziomie subskrypcji (Android 15 lub nowszy).

Możliwości usług na poziomie urządzenia

Funkcje usługi na poziomie urządzenia są konfigurowane, gdy urządzenie jest wyprodukowane (nie można go zmienić po wyprodukowaniu). Operatorzy mogą określ możliwości na poziomie urządzenia za pomocą poniższego zasobu systemowego zastąpienia:

Aplikacje mogą wysyłać zapytania o możliwości usługi na poziomie urządzenia za pomocą tych danych: Interfejsy API:

Możliwości usługi na poziomie subskrypcji

Na urządzeniach z Androidem 15 lub nowszym operatorzy mogą określić możliwości usługi urządzenia na poziomie subskrypcji. Aby określić usługę na poziomie subskrypcji funkcji, użyj CarrierConfigManager.KEY_CELLULAR_SERVICE_CAPABILITIES_INT_ARRAY API. Aby na przykład wskazać, że subskrypcja dotyczy tylko danych, ustaw wartość na SubscriptionManager#SERVICE_CAPABILITY_DATA

Aplikacje (wstępnie załadowane aplikacje systemowe i aplikacje innych firm) mogą wysyłać zapytania do operatora możliwości w ramach określonej subskrypcji w ramach SubscriptionInfo.getServiceCapabilities() . Pozwala to deweloperom dostosowywać działanie aplikacji na podstawie na temat możliwości związanych z subskrypcją. Deweloperzy aplikacji mogą na przykład upewnij się, że aplikacja telefonu nie zezwala na nawiązywanie połączeń, jeśli użytkownik korzysta z subskrypcji tylko do danych.

Wycofane interfejsy API funkcji usługi

Począwszy od Androida 15, Android udostępnia zarówno funkcje na poziomie urządzenia, możliwości usługi na poziomie subskrypcji. Ze względu na tę zmianę dotychczasowy poziom urządzeń interfejsy API funkcji zostały zmienione, aby zwiększyć czytelność. Poniższa tabela zawiera wycofane interfejsy API i te pod nową nazwą, które wprowadzono w Androidzie 15:

Wycofane (Android 14 lub starszy) Odpowiednik (Android 15 lub nowszy)
TelephonyManager.isVoiceCapable() TelephonyManager.isDeviceVoiceCapable()
TelephonyManager.isSmsCapable() TelephonyManager.isDeviceSmsCapable()