En el caso de los dispositivos que ejecutan Android 15 o versiones posteriores, puedes implementar la selección de dominios entre el servicio de IMS y los servicios heredados a través de redes con conmutación de circuitos usando la API del sistema DomainSelectionService
. 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 a la plataforma información de señalización, como el dominio al que se realizan las llamadas salientes y los SMS, y la preferencia de tipo de red en el escaneo de red.
Figura 1: Diagrama de arquitectura de 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 dominios en AOSP en TelephonyDomainSelectionService
. Para obtener documentación detallada de la API de DomainSelectionService
, consulta DomainSelectionService
y las otras clases de la API.
Implementación
Para implementar la función de selección de dominios en un dispositivo Android, se requieren los siguientes pasos:
Crea una app de selección de dominios. El servicio se debe definir en el archivo
AndroidManifest.xml
.Agrega una configuración a la superposición del dispositivo para permitir que la plataforma se vincule a la implementación de
DomainSelectionService
.Admite las interfaces de HAL de radio necesarias para la función de selección de dominio.
En esta sección, se proporcionan más detalles sobre estos pasos.
Agrega la 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 del servicio en AndroidManifest.xml
debe definir los siguientes atributos para que funcione la función de selección de dominio.
directBootAware="true"
: Permite que la telefonía descubra y ejecute el servicio antes de que el usuario desbloquee el dispositivo. El servicio no puede acceder al almacenamiento encriptado por el dispositivo antes de que el usuario lo desbloquee. Para obtener más información, consulta Cómo admitir el modo de inicio directo y Encriptación basada en archivos.persistent="true"
: Permite que el servicio se ejecute de forma persistente y que el sistema no lo finalice para recuperar memoria. Este atributo funciona solo si la app se compila como una app del sistema.permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE"
: Garantiza que solo un proceso que tenga el permisoBIND_DOMAIN_SELECTION_SERVICE
otorgado pueda vincularse a la app. Esto evita que una app no autorizada se vincule al servicio, ya que solo el framework 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 de dispositivos:
config_domain_selection_service_component_name
: Es el nombre del componente (una cadenaComponentName
aplanada) para el servicioDomainSelectionService
.
Debido a que Android no admite apps con implementaciones de DomainSelectionService
descargables de terceros, la app de selección de dominios 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 garantizar que solo se vinculen apps preinstaladas de confianza.
Cómo admitir interfaces HAL de radio
Para habilitar la función de selección de dominio, admite las siguientes interfaces de HAL de radio obligatorias:
-
void setEmergencyMode(int serial, EmergencyMode emcModeType); void triggerEmergencyNetworkScan(int serial, EmergencyNetworkScanTrigger request); void cancelEmergencyNetworkScan(int serial, boolean resetScan); void exitEmergencyMode(int serial);
-
void emergencyNetworkScanResult(RadioIndicationType type, EmergencyRegResult result);
Validación
Para probar que el framework de telefonía responda correctamente a la interfaz DomainSelectionService
, ejecuta las pruebas de CTS en DomainSelectionServiceTestOnMockModem
.