Servicio de selección de dominio

En dispositivos que ejecutan Android 15 o versiones posteriores, puedes implementar la selección de dominio entre el servicio IMS y los servicios heredados en redes conmutadas por circuitos con la DomainSelectionService API del sistema. DomainSelectionService es una interfaz bien definida entre la plataforma de Android y una implementación de selección de dominio proporcionada por el proveedor. Esta interfaz permite que la implementación del proveedor proporcione información de señalización, como el dominio en el que se realizan las llamadas salientes y los SMS, y la preferencia de tipo de red en el análisis de red, a la plataforma.

Diagrama de arquitectura del servicio de selección de dominio que muestra su interacción con la plataforma de Android y las implementaciones del proveedor

Figura 1: Diagrama de arquitectura para la función de selección de dominio

Ejemplos y fuente

Android proporciona una implementación de referencia para la función de selección de dominio en el Proyecto de código abierto de Android (AOSP) en TelephonyDomainSelectionService. Para obtener documentación detallada sobre la API de DomainSelectionService, consulta DomainSelectionService y las otras clases de la API.

Implementación

Para implementar la función de selección de dominio en un dispositivo con tecnología Android, se requieren los siguientes pasos:

  1. Crea una app de selección de dominio. El servicio debe definirse en el archivo AndroidManifest.xml.

  2. Agrega una configuración a la superposición del dispositivo para permitir que la plataforma se vincule a la implementación de DomainSelectionService.

  3. Admite las interfaces de la capa de abstracción de hardware (HAL) de radio requeridas para la función de selección de dominio.

En esta sección, se proporcionan más detalles sobre estos pasos.

Agrega una entrada de servicio en AndroidManifest.xml

Para que tu app de selección de dominio registre el servicio DomainSelectionService con el framework, agrega una entrada de servicio en el archivo de manifiesto con el siguiente 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 definición de servicio en AndroidManifest.xml debe definir los siguientes atributos para que funcione la función de selección de dominio:

  • directBootAware="true": Permite que el servicio sea descubierto y ejecutado por telefonía antes de que el usuario desbloquee el dispositivo. El servicio no puede acceder al almacenamiento encriptado del dispositivo antes de que el usuario lo desbloquee. Para obtener más información, consulta Cómo admitir el modo de inicio directo y la encriptación basada en archivos.
  • persistent="true": Permite que el servicio se ejecute de forma persistente y que el sistema no lo cierre para recuperar memoria. Este atributo funciona solo si la app se compila como una app del sistema.
  • permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE": Verifica que solo un proceso que tenga el permiso BIND_DOMAIN_SELECTION_SERVICE otorgado pueda vincularse a la app. Esto evita que una app maliciosa se vincule al servicio, ya que el framework solo puede otorgar el permiso a las apps del sistema.

El servicio también debe especificar el elemento intent-filter con la acción android.telephony.DomainSelectionService. Esto permite que el framework encuentre el servicio DomainSelectionService.

Define la configuración en la superposición del dispositivo

Para que la plataforma se vincule de forma segura al servicio DomainSelectionService, agrega la siguiente configuración a la superposición del dispositivo:

Debido a que Android no admite apps con implementaciones de DomainSelectionService descargables de terceros, la app de selección de dominio debe ser una app del sistema que resida en la carpeta /system_ext/priv-app/ o /product/priv-app/. El framework verifica si el nombre del paquete de la implementación coincide con el valor de la superposición del dispositivo para verificar que solo se vinculen las apps de confianza preinstaladas.

Admite interfaces HAL de radio

Para habilitar la función de selección de dominio, admite las siguientes interfaces HAL de radio requeridas:

  • 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);
    

Validación

Para probar que el framework de telefonía responda correctamente a la DomainSelectionService interfaz, ejecuta las pruebas del Conjunto de pruebas de compatibilidad (CTS) en DomainSelectionServiceTestOnMockModem.