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:
- aplikację operatora (jest to opcjonalne, ale zalecane, lokalizacja na potrzeby dodatkowej konfiguracji poza tą dostępną w Androidzie Open; Projekt źródłowy (AOSP)
- Aplikacja do konfiguracji platformy powiązana z obrazem systemu
- 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
- Zastąp
onLoadConfig
, aby zwrócić odpowiednie wartości źródło na podstawie obiektuservice.carrier.CarrierIdentifier
zaliczono. - 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() |