Anbieterkonfiguration

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:

  1. Die Mobilfunkanbieter-App (optional, aber empfohlen) Standort für zusätzliche Konfigurationsmöglichkeiten, die über die Einstellungen in Android Open hinausgehen Quellprojekt (AOSP)
  2. Die mit dem System-Image gebündelte App zur Plattformkonfiguration
  3. 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

  1. Überschreiben Sie onLoadConfig, um die gewünschten Werte zurückzugeben Angebot basierend auf dem service.carrier.CarrierIdentifier-Objekt bestanden.
  2. 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