Configurazione gestore di telefonia mobile

Android 6.0 e versioni successive includono una funzionalità per app per fornire una configurazione specifica dell'operatore alla piattaforma. Questo in base ai privilegi dell'operatore UICC. introdotto in Android 5.1 (Lollipop MR1), consente completamente gestita dagli overlay di configurazione statici. agli operatori e agli OEM la possibilità di fornire dinamicamente la configurazione dell'operatore attraverso un'interfaccia definita.

Un'app dell'operatore firmata correttamente può essere precaricata nell'immagine di sistema, installati automaticamente o manualmente tramite uno store. L'app la piattaforma esegue una query per fornire la configurazione delle impostazioni tra cui:

  • Reti di roaming/non in roaming
  • Lettura della segreteria
  • Impostazioni di rete SMS/MMS
  • Configurazioni VoLTE/IMS
di Gemini Advanced.

La determinazione dei valori da restituire spetta interamente all'app dell'operatore e può essere dinamico in base a informazioni dettagliate trasmesse all'app tramite completamente gestita.

I principali vantaggi di questo approccio sono:

  • Configurazione dinamica: supporto per concetti quali configurazione derivata non MCCMNC, ad esempio operatori di reti virtuali mobili (MVNO) o clienti che attivano servizi aggiuntivi.
  • Supporto di dispositivi venduti tramite qualsiasi canale: ad esempio, una uno smartphone open market può essere configurato automaticamente con impostazioni scaricando un'app da uno store.
  • Sicurezza: il privilegio per fornire questa configurazione è disponibili soltanto per le app firmate dall'operatore.
  • API definita: in precedenza questa configurazione era archiviata principalmente in overlay XML interni all'interno del framework e non tramite un tramite Google Cloud CLI o tramite l'API Compute Engine. L'API Carrier Config in Android 6.0 è pubblica e ben definita.

Come funziona

Carica la configurazione

La configurazione dell'operatore fornita da questa funzionalità è un insieme di coppie chiave-valore che modificano i vari comportamenti relativi alla telefonia nella piattaforma.

L'insieme di valori per un particolare dispositivo viene determinato eseguendo una query sul i seguenti componenti in ordine:

  1. L'app dell'operatore (facoltativa, ma consigliata posizione per una configurazione aggiuntiva oltre a quella esistente nell'Android Open Progetto di origine (AOSP)
  2. L'app di configurazione della piattaforma in bundle con l'immagine di sistema
  3. Valori predefiniti impostati come hardcoded nel framework (equivalente al comportamento precedente ad Android 6.0)
di Gemini Advanced.

App di configurazione della piattaforma

All'immagine di sistema è inclusa un'app di configurazione della piattaforma generica. Questa app può fornire per eventuali variabili diverse dall'app dell'operatore standard. La configurazione della piattaforma app disponibile su Android 6.0 in: packages/apps/CarrierConfig

Lo scopo di questa app è fornire una configurazione per ogni rete quando un operatore l'app non viene installata e gli operatori/OEM dovrebbero apportare solo modifiche minime nelle proprie immagini. Gli operatori devono invece fornire l'app dell'operatore separata per la personalizzazione degli operatori, consentendo la distribuzione degli aggiornamenti attraverso canali come store.

Modalità di concessione dei privilegi all'app di un operatore

L'app dell'operatore in questione deve essere firmata con lo stesso certificato presente su La scheda SIM, come documentato in Privilegi dell'operatore UICC.

Quali informazioni vengono trasmesse all'app dell'operatore

L'app dell'operatore viene fornita con i seguenti valori, che le consentono di effettuare una decisione dinamica sui valori da restituire:

  • MCC
  • MNC
  • SPN
  • IMSI
  • GID1
  • GID2
  • ID operatore

Per maggiori informazioni sull'integrazione degli ID operatore, consulta Integrazione degli ID operatore con CarrierConfig.

Durante il caricamento della configurazione dell'operatore

Si verifica la creazione dell'elenco di coppie chiave-valore:

  • Quando la SIM è caricata (avvio o hot swap della SIM)
  • Quando l'app dell'operatore attiva manualmente un ricaricamento
  • Quando l'app dell'operatore viene aggiornata

Consulta android.service.carrier.CarrierService#onLoadConfig() di riferimento per ulteriori dettagli.

Utilizza la configurazione

Quando viene creata la configurazione, i valori al suo interno vengono utilizzati per impostare vari valori della configurazione di sistema, tra cui:

  • Impostazioni telefonia framework interno
  • Valori di configurazione restituiti dall'SDK, ad esempio in SmsManager
  • Impostazioni dell'app come i valori della connessione VVM nel Telefono

Chiavi di configurazione

L'elenco di chiavi fa parte dell'SDK pubblico in android.telephony.CarrierConfigManager e non possono modificarlo all'interno dello stesso livello API. Consulta la tabella seguente per un riepilogo delle chiavi.

Crea l'app

Crea l'app

La tua app deve avere come target il livello API Android 6.0 (23).

Dichiara una classe che sostituisce android.service.carrier.CarrierService

  1. Esegui l'override di onLoadConfig per restituire i valori che vuoi in base all'oggetto service.carrier.CarrierIdentifier superato.
  2. Aggiungi logica per chiamare notifyConfigChangedForSubId in scenari in cui la configurazione dell'operatore può cambiare nel tempo (ad esempio, quando l'utente aggiunge servizi extra al proprio account).

Ecco un esempio:

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

Per ulteriori dettagli, consulta android.service.carrier.CarrierService riferimento.

Assegna un nome alla classe nel manifest

Ecco un esempio:

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

Firma l'app con lo stesso certificato su SIM

Consulta Privilegi operatore UICC per i tuoi requisiti.

Aggiungere APN con un'app dell'operatore

Per aggiungere APN in modo programmatico dall'app di un operatore (ad esempio, durante le chiamate attivazione), utilizza ContentResolver API per aggiungere elementi APN a un fornitore di contenuti identificati dall'URI android.provider.Telephony.Carriers.CONTENT_URI. Per ulteriori informazioni sulla struttura della tabella per l'URI contenuto, consulta Telephony.Carriers.

Per ulteriori informazioni, vedi APN e CarrierConfig.

Testa l'app

Dopo aver creato l'app di configurazione, puoi testare il codice con:

  • Una SIM contenente una firma del certificato valida
  • Un dispositivo con Android 6.0 e versioni successive, ad esempio un dispositivo Android.