Configurazione del vettore

Android 6.0 e versioni successive includono la 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 dagli overlay di configurazione statici 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 firmata correttamente 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 delle impostazioni, tra cui:

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

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

I principali vantaggi di questo approccio sono:

  • Configurazione dinamica : supporto per concetti come la configurazione derivata non MCCMNC, ad esempio, gli operatori di rete virtuale mobile (MVNO) o l'adesione del cliente a servizi extra.
  • Supporto per dispositivi venduti tramite qualsiasi canale : ad esempio, un telefono del mercato aperto può essere configurato automaticamente con le giuste impostazioni scaricando un'app da un app store.
  • Sicurezza : il privilegio di fornire questa configurazione è concesso solo alle app firmate dall'operatore.
  • API definita : in precedenza questa configurazione veniva archiviata principalmente in overlay XML interni al 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 configurazione

La configurazione dell'operatore fornita da questa funzionalità è 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 in ordine:

  1. L'app dell'operatore (è facoltativa, ma è la posizione consigliata per configurazioni aggiuntive oltre a quelle esistenti 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 viene fornita in bundle con l'immagine di sistema. Questa app può fornire valori per qualsiasi variabile che l'app dell'operatore normale 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 l'app dell'operatore non è installata e gli operatori/OEM dovrebbero apportare solo modifiche minime nelle proprie immagini. Gli operatori dovrebbero invece fornire un'app separata per la personalizzazione dell'operatore, consentendo la distribuzione degli aggiornamenti attraverso canali come gli app store.

Come vengono concessi i privilegi a un'app dell'operatore

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

Quali informazioni vengono trasmesse all'app dell'operatore

L'app dell'operatore viene fornita con i seguenti valori, consentendogli di prendere una decisione dinamica su quali valori restituire:

  • Centro clienti
  • MNC
  • SPN
  • IMSI
  • GID1
  • GID2
  • ID dell'operatore

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

Durante il caricamento si verifica la configurazione dell'operatore

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

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

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

Utilizzando la configurazione

Quando viene creata la configurazione, 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 Android 6.0 (23).

Dichiarare una classe che sovrascrive android.service.carrier.CarrierService

  1. Sostituisci onLoadConfig per restituire i valori che desideri fornire in base all'oggetto service.carrier.CarrierIdentifier passato.
  2. Aggiungi logica per chiamare notifyConfigChangedForSubId negli 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 .

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

Firmare l'app con lo stesso certificato sulla SIM

Per i requisiti, consulta Privilegi del vettore UICC .

Aggiunta di APN con l'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, consulta APN e CarrierConfig .

Testare l'app

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

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