Servizio di selezione del dominio

Per i dispositivi con Android 15 o versioni successive, puoi implementare la selezione del dominio tra il servizio IMS e i servizi legacy sulle reti a commutazione di circuito utilizzando l'API di sistema DomainSelectionService. DomainSelectionService è un'interfaccia ben definita tra la piattaforma Android e un'implementazione di selezione del dominio fornita dal fornitore. Questa interfaccia consente all'implementazione del fornitore di fornire alla piattaforma informazioni di segnalazione, come il dominio in cui vengono effettuate le chiamate e gli SMS in uscita e la preferenza del tipo di rete nella scansione della rete.

Diagramma dell'architettura del servizio di selezione del dominio che mostra la sua interazione con la piattaforma Android e le implementazioni del fornitore

Figura 1. Diagramma dell'architettura della funzionalità di selezione del dominio

Esempi e codice sorgente

Android fornisce un'implementazione di riferimento per la funzionalità di selezione del dominio in Android Open Source Project (AOSP) all'indirizzo TelephonyDomainSelectionService. Per la documentazione dettagliata dell'API DomainSelectionService, consulta DomainSelectionService e le altre classi dell'API.

Implementazione

Per implementare la funzionalità di selezione del dominio su un dispositivo con Android, sono necessari i seguenti passaggi:

  1. Crea un'app di selezione del dominio. Il servizio deve essere definito nel file AndroidManifest.xml.

  2. Aggiungi una configurazione all'overlay del dispositivo per consentire alla piattaforma di eseguire il binding all'implementazione di DomainSelectionService.

  3. Supporta le interfacce del livello di astrazione hardware radio (HAL) richieste per la funzionalità di selezione del dominio.

Questa sezione fornisce ulteriori dettagli su questi passaggi.

Aggiungere una voce di servizio in AndroidManifest.xml

Affinché l'app di selezione del dominio registri il servizio DomainSelectionService con il framework, aggiungi una voce di servizio nel file manifest utilizzando il seguente formato:

<service
     android:name="com.example.domainselection.DomainSelectionService"
     android:directBootAware="true"
     android:persistent="true"
     …
     android:permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE"
     …
    <intent-filter>
        <action android:name="android.telephony.DomainSelectionService"/>
    </intent-filter>
    …
</service>

La definizione del servizio in AndroidManifest.xml deve definire i seguenti attributi per il funzionamento della funzionalità di selezione del dominio:

  • directBootAware="true": consente al servizio di essere rilevato ed eseguito dalla telefonia prima che l'utente sblocchi il dispositivo. Il servizio non può accedere allo spazio di archiviazione crittografato del dispositivo prima che l'utente sblocchi il dispositivo. Per ulteriori informazioni, consulta Supportare la modalità di avvio diretto e la crittografia basata su file.
  • persistent="true": consente al servizio di essere eseguito in modo persistente e di non essere terminato dal sistema per recuperare memoria. Questo attributo funziona solo se l'app è creata come app di sistema.
  • permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE": verifica che solo un processo a cui è stata concessa l'autorizzazione BIND_DOMAIN_SELECTION_SERVICE possa eseguire il binding all'app. In questo modo, un'app dannosa non può eseguire il binding al servizio, perché solo le app di sistema possono ricevere l'autorizzazione dal framework.

Il servizio deve anche specificare l'elemento intent-filter con l'azione android.telephony.DomainSelectionService. In questo modo, il framework può trovare il servizio DomainSelectionService.

Definire la configurazione nell'overlay del dispositivo

Affinché la piattaforma possa eseguire il binding in modo sicuro al servizio DomainSelectionService, aggiungi la seguente configurazione all'overlay del dispositivo:

Poiché Android non supporta le app con implementazioni di DomainSelectionService scaricabili di terze parti, l'app di selezione del dominio deve essere un'app di sistema che si trova nella cartella /system_ext/priv-app/ o /product/priv-app/. Il framework verifica se il nome del pacchetto dell'implementazione corrisponde al valore dell'overlay del dispositivo per verificare che solo le app preinstallate attendibili siano associate.

Supportare le interfacce HAL radio

Per attivare la funzionalità di selezione del dominio, supporta le seguenti interfacce HAL radio richieste:

  • IRadioNetwork

    void setEmergencyMode(int serial, EmergencyMode emcModeType);
    void triggerEmergencyNetworkScan(int serial,
            EmergencyNetworkScanTrigger request);
    void cancelEmergencyNetworkScan(int serial, boolean resetScan);
    void exitEmergencyMode(int serial);
    
  • IRadioNetworkIndication

    void emergencyNetworkScanResult(RadioIndicationType type,
            EmergencyRegResult result);
    

Convalida

Per verificare che il framework di telefonia risponda correttamente all' DomainSelectionService interfaccia, esegui i test della suite di test di compatibilità (CTS) in DomainSelectionServiceTestOnMockModem.