Android 6.0 und höher beinhalten eine Berechtigung für privilegierte Apps, um anbieterspezifische Konfigurationen auf der Plattform bereitzustellen. Dieses basierend auf den UICC-Mobilfunkanbieterberechtigungen Android 5.1 (Lollipop MR1) eingeführt. die aus den statischen Konfigurations-Overlays entfernt wird, können Mobilfunkanbieter und OEMs die Konfiguration der Mobilfunkbetreiber dynamisch die Plattform über eine definierte Schnittstelle.
Eine ordnungsgemäß signierte Mobilfunkanbieter-App kann entweder im System-Image oder manuell über einen App-Shop installiert werden. Die App wird von der Plattform abgefragt, um die Konfiguration der Einstellungen bereitzustellen einschließlich:
- Roaming-/Nicht-Roaming-Netzwerke
- Visuelle Mailbox
- SMS-/MMS-Netzwerkeinstellungen
- VoLTE/IMS-Konfigurationen
Welche Werte zurückgegeben werden, liegt allein bei der App des Mobilfunkanbieters. und können dynamisch basierend auf detaillierten Informationen erstellt werden, die über die Plattform.
Die wichtigsten Vorteile dieses Ansatzes sind:
- Dynamische Konfiguration – Unterstützung für Konzepte wie nicht-MCCMNC-abgeleitete Konfiguration. Beispiel: Mobilfunkanbieter oder Kunden entscheiden sich für zusätzliche Dienste.
- Support für Geräte, die über alle Kanäle verkauft werden, z. B. eine Open-Market-Telefon kann automatisch mit dem richtigen indem Sie eine App aus einem App-Shop herunterladen.
- Sicherheit – Berechtigung zur Bereitstellung dieser Konfiguration ist nur für vom Mobilfunkanbieter signierte Apps vergeben.
- Defined API: Zuvor wurde diese Konfiguration gespeichert. hauptsächlich in internen XML-Overlays innerhalb des Frameworks und nicht über ein öffentliches der API erstellen. Die Konfigurations-API für Mobilfunkanbieter in Android 6.0 ist öffentlich und klar definiert.
Funktionsweise
Konfiguration laden
Die Mobilfunkbetreiber-Konfiguration dieser Funktion besteht aus einer Reihe von Schlüssel/Wert-Paaren. die verschiedene Telefoniefunktionen auf der Plattform verändern.
Die Gruppe von Werten für ein bestimmtes Gerät wird durch die Abfrage der der folgenden Komponenten in der richtigen Reihenfolge:
- Die Mobilfunkanbieter-App (optional, aber empfohlen) Standort für zusätzliche Konfigurationsmöglichkeiten, die über die Einstellungen in Android Open hinausgehen Quellprojekt (AOSP)
- Die mit dem System-Image gebündelte App zur Plattformkonfiguration
- Standardwerte, hartcodiert im Framework (entspricht dem Verhalten vor bis Android 6.0)
Plattformkonfigurationsanwendung
Eine generische Plattformkonfigurationsanwendung ist mit dem System-Image gebündelt. Diese App kann Folgendes bereitstellen:
für alle Variablen, die die reguläre App des Mobilfunkanbieters nicht unterstützt. Die Plattformkonfiguration
App befindet sich (in Android 6.0) hier: packages/apps/CarrierConfig
Der Zweck dieser App besteht darin, eine Konfiguration netzwerkspezifisch bereitzustellen, wenn ein Mobilfunkanbieter nicht installiert ist und Mobilfunkanbieter/OEMs nur minimale Änderungen daran vornehmen sollten. in ihren eigenen Bildern. Stattdessen sollten Mobilfunkanbieter die separate App des Mobilfunkanbieters bereitstellen. die Möglichkeit, Updates über verschiedene Wege zu verteilen, z. B. wie App-Stores.
So gewähren Sie einer Mobilfunkanbieter-App Berechtigungen
Die betreffende Mobilfunkanbieter-App muss mit demselben Zertifikat signiert sein, das auf die SIM-Karte, wie unter UICC-Berechtigungen für Mobilfunkanbieter beschrieben.
Welche Informationen an die App des Mobilfunkanbieters übergeben werden
Die Mobilfunkanbieter-App wird mit den folgenden Werten bereitgestellt, damit sie eine dynamische Entscheidung darüber, welche Werte zurückgegeben werden sollen:
- MCC
- MNC
- SPN
- IMSI
- GID1
- GID2
- Mobilfunkanbieter-ID
Weitere Informationen zur Integration von Mobilfunkanbieter-IDs finden Sie unter <ph type="x-smartling-placeholder"></ph> Mobilfunkanbieter-IDs in CarrierConfig einbinden
Beim Laden der Mobilfunkanbieter-Konfiguration
Die Liste der Schlüssel/Wert-Paare wird erstellt:
- Wenn die SIM-Karte geladen ist (Starten oder Hot-Swap der SIM-Karte)
- Wenn die Mobilfunkanbieter-App manuell eine Aktualisierung auslöst
- Wenn die Mobilfunkanbieter-App aktualisiert wird
Siehe
android.service.carrier.CarrierService#onLoadConfig()
.
finden Sie weitere Informationen.
Konfiguration verwenden
Beim Erstellen der Konfiguration werden die darin enthaltenen Werte verwendet um verschiedene Werte für die Systemkonfiguration festzulegen, darunter:
- Einstellungen für interne Framework-Telefonie
- Vom SDK zurückgegebene Konfigurationswerte, z. B. in SmsManager
- App-Einstellungen wie VVM-Verbindungswerte im Telefon
Konfigurationsschlüssel
Die Liste der Schlüssel wird als Teil des öffentlichen SDK in android.telephony.CarrierConfigManager
definiert
und können auf derselben API-Ebene nicht geändert werden. Eine Zusammenfassung der Schlüssel finden Sie in der folgenden Tabelle.
App erstellen
Anwendung erstellen
Deine App muss auf das Android 6.0 API-Level (23) ausgerichtet sein.
Klasse deklarieren, die „android.service.carrier.CarrierService“ überschreibt
- Überschreiben Sie
onLoadConfig
, um die gewünschten Werte zurückzugeben Angebot basierend auf demservice.carrier.CarrierIdentifier
-Objekt bestanden. - Logik zum Aufrufen von
notifyConfigChangedForSubId
in Szenarien hinzufügen bei denen sich die Konfiguration des Mobilfunkanbieters im Laufe der Zeit ändern kann, z. B. wenn das Nutzer zusätzliche Dienste zu seinem Konto hinzufügt).
Hier ein Beispiel:
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; } }
Weitere Informationen finden Sie in der
android.service.carrier.CarrierService
Referenz.
Geben Sie der Klasse im Manifest einen Namen.
Hier ein Beispiel:
<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>
Signieren Sie die App mit derselben Zertifikat auf SIM
Weitere Informationen finden Sie unter UICC-Mobilfunkanbieterberechtigungen für die Anforderungen.
APNs mit einer Mobilfunkanbieter-App hinzufügen
So fügen Sie APNs programmatisch über eine Mobilfunkanbieter-App hinzu, z. B. während der SIM
Aktivierung) verwenden, verwenden Sie
<ph type="x-smartling-placeholder"></ph>
ContentResolver
APIs, um einem Contentanbieter APN-Elemente hinzuzufügen
durch den URI identifiziert
<ph type="x-smartling-placeholder"></ph>
android.provider.Telephony.Carriers.CONTENT_URI
Weitere Informationen zur Tabellenstruktur für den Inhalts-URI finden Sie unter
<ph type="x-smartling-placeholder"></ph>
Telephony.Carriers
Weitere Informationen finden Sie unter APN und CarrierConfig.
App testen
Wenn Sie Ihre Konfigurations-App erstellt haben, können Sie Ihren Code testen durch:
- Eine SIM mit einer gültigen Zertifikatssignatur
- Ein Gerät mit Android 6.0 und höher, z. B. ein Android-Gerät