Configurazione del vettore

Android 6.0 e versioni successive includono una funzionalità per le app privilegiate di fornire alla piattaforma una configurazione specifica dell'operatore. Questa funzionalità, basata sui privilegi dell'operatore UICC introdotti in Android 5.1 (Lollipop MR1), consente di spostare la configurazione dell'operatore lontano dagli overlay di configurazione statica e offre agli operatori e agli OEM la possibilità di fornire dinamicamente la configurazione dell'operatore alla piattaforma attraverso un'interfaccia definita.

Un'app dell'operatore correttamente firmata può essere precaricata nell'immagine di sistema, installata automaticamente o installata manualmente tramite un app store. L'app viene interrogata dalla piattaforma per fornire la configurazione per le impostazioni tra cui:

  • Reti in roaming/non in roaming
  • Segreteria visiva
  • Impostazioni di rete SMS/MMS
  • Configurazioni VoLTE/IMS

La determinazione di quali valori restituire dipende interamente dall'app dell'operatore e può essere dinamica sulla base di informazioni dettagliate trasmesse all'app tramite la piattaforma.

I principali vantaggi di questo approccio sono:

  • Configurazione dinamica : supporto per concetti come la configurazione non derivata da MCCMNC, ad esempio, operatori di rete virtuale mobile (MVNO) o attivazione del cliente per servizi aggiuntivi.
  • Supporto per dispositivi venduti tramite qualsiasi canale - Ad esempio, un telefono open market può essere configurato automaticamente con le impostazioni corrette scaricando un'app da un app store.
  • Sicurezza : il privilegio di fornire questa configurazione viene concesso solo alle app firmate dall'operatore.
  • API definita : in precedenza questa configurazione veniva archiviata principalmente in overlay XML interni all'interno del framework e non tramite un'API pubblica. L'API di configurazione dell'operatore in Android 6.0 è pubblica e ben definita.

Come funziona

Caricamento della config

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

L'insieme di valori per un particolare dispositivo viene determinato interrogando i seguenti componenti nell'ordine:

  1. L'app dell'operatore (questo è facoltativo, ma è la posizione consigliata per una configurazione aggiuntiva oltre a quella esistente nell'Android Open Source Project (AOSP))
  2. L'app di configurazione della piattaforma in bundle con l'immagine di sistema
  3. Valori predefiniti, codificati nel framework (equivalenti al comportamento precedente ad Android 6.0)

L'app di configurazione della piattaforma

Un'app di configurazione della piattaforma generica è inclusa nell'immagine di sistema. Questa app può fornire valori per tutte le variabili che la normale app del gestore telefonico non fornisce. L'app di configurazione della piattaforma può essere trovata (in Android 6.0) in: packages/apps/CarrierConfig

Lo scopo di questa app è fornire alcune configurazioni per rete quando non è installata un'app dell'operatore e gli operatori/OEM dovrebbero apportare solo modifiche minime alle proprie immagini. Gli operatori dovrebbero invece fornire l'app dell'operatore separata per la personalizzazione dell'operatore, consentendo la distribuzione degli aggiornamenti attraverso vie come gli app store.

Come viene concesso il privilegio a un'app dell'operatore

L'app dell'operatore in questione deve essere firmata con lo stesso certificato che si trova sulla carta SIM, come documentato in UICC Carrier Privileges .

Quali informazioni vengono trasmesse all'app dell'operatore

L'app del corriere viene fornita con i seguenti valori, consentendole di prendere una decisione dinamica su quali valori restituire:

  • MCC
  • multinazionale
  • SPN
  • IMSI
  • GID1
  • GID2
  • ID vettore

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

Durante il caricamento si verifica la configurazione del vettore

La costruzione dell'elenco delle coppie chiave-valore avviene:

  • Quando la SIM è caricata (avvio o sostituzione a caldo della SIM)
  • Quando l'app del corriere attiva manualmente una ricarica
  • Quando l'app dell'operatore viene aggiornata

Vedere il riferimento android.service.carrier.CarrierService#onLoadConfig() per maggiori dettagli.

Usando la config

Quando la configurazione viene creata, i valori in essa contenuti vengono utilizzati per impostare vari valori di configurazione del sistema, tra cui:

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

Chiavi di configurazione

L'elenco delle chiavi è definito come parte dell'SDK pubblico in android.telephony.CarrierConfigManager e non può cambiare all'interno dello stesso livello API. Vedere la tabella seguente per un riepilogo delle chiavi.

Costruire l'app

Creazione dell'app

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

Dichiarazione di una classe che esegue l'override di android.service.carrier.CarrierService

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

Un esempio è di seguito:

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, vedere il riferimento android.service.carrier.CarrierService .

Assegnare un nome alla classe nel manifest

Un esempio è di seguito:

<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 dell'app con lo stesso certificato su SIM

Vedere i privilegi del vettore UICC per i requisiti.

Aggiunta di APN con un'app dell'operatore

Per aggiungere APN a livello di codice da un'app dell'operatore (ad esempio, durante l'attivazione della SIM), utilizza le API ContentResolver per aggiungere elementi APN a un provider di contenuti identificato dall'URI android.provider.Telephony.Carriers.CONTENT_URI . Per ulteriori informazioni sulla struttura della tabella per l'URI del contenuto, vedere Telephony.Carriers .

Per ulteriori informazioni, vedere APN e CarrierConfig .

Testare l'app

Dopo aver creato la tua app di configurazione, puoi testare il tuo codice con:

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