Serviço de seleção de domínio

Em dispositivos com o Android 15 ou mais recente, é possível implementar a seleção de domínio entre o serviço IMS e serviços legados em redes com comutação de circuito usando a DomainSelectionService API do sistema. DomainSelectionService é uma interface bem definida entre a plataforma Android e uma implementação de seleção de domínio fornecida pelo fornecedor. Essa interface permite que a implementação do fornecedor forneça informações de sinalização, como o domínio em que as chamadas e SMS enviados são feitos e a preferência de tipo de rede na verificação de rede, para a plataforma.

Diagrama de arquitetura do Serviço de seleção de domínio mostrando a interação dele com a plataforma Android e implementações de fornecedores

Figura 1. Diagrama de arquitetura do recurso de seleção de domínio

Exemplos e origem

O Android oferece uma implementação de referência para o recurso de seleção de domínio em o Android Open Source Project (AOSP) em TelephonyDomainSelectionService. Para conferir a documentação detalhada da API DomainSelectionService, consulte DomainSelectionService e as outras classes na API.

Implementação

Para implementar o recurso de seleção de domínio em um dispositivo Android, as seguintes etapas são necessárias:

  1. Crie um app de seleção de domínio. O serviço precisa ser definido no arquivo AndroidManifest.xml.

  2. Adicione uma configuração à sobreposição do dispositivo para permitir que a plataforma se vincule à implementação DomainSelectionService.

  3. Ofereça suporte às interfaces de camada de abstração de hardware (HAL) de rádio necessárias para o recurso de seleção de domínio.

Esta seção fornece mais detalhes sobre essas etapas.

Adicionar entrada de serviço no AndroidManifest.xml

Para que o app de seleção de domínio registre o serviço DomainSelectionService com a estrutura, adicione uma entrada de serviço no arquivo de manifesto usando o seguinte 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>

A definição de serviço em AndroidManifest.xml precisa definir os seguintes atributos para que o recurso de seleção de domínio funcione:

  • directBootAware="true": permite que o serviço seja descoberto e executado pela telefonia antes que o usuário desbloqueie o dispositivo. O serviço não pode acessar o armazenamento criptografado pelo dispositivo antes que o usuário desbloqueie o dispositivo. Para mais informações, consulte Oferecer suporte ao modo de inicialização direta e à criptografia baseada em arquivos.
  • persistent="true": permite que o serviço seja executado de forma persistente e não seja encerrado pelo sistema para recuperar memória. Esse atributo funciona somente se o app for criado como um app do sistema.
  • permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE": Verifica se apenas um processo que tem a permissão BIND_DOMAIN_SELECTION_SERVICE concedida a ele pode se vincular ao app. Isso impede que um app malicioso se vincule ao serviço, porque apenas os apps do sistema podem receber a permissão da estrutura.

O serviço também precisa especificar o elemento intent-filter com a ação android.telephony.DomainSelectionService. Isso permite que a estrutura encontre o serviço DomainSelectionService.

Definir configuração na sobreposição do dispositivo

Para que a plataforma se vincule com segurança ao serviço DomainSelectionService, adicione a seguinte configuração à sobreposição do dispositivo:

Como o Android não oferece suporte a apps com implementações DomainSelectionService de terceiros para download, o app de seleção de domínio precisa ser um app do sistema que reside na pasta /system_ext/priv-app/ ou /product/priv-app/. A estrutura verifica se o nome do pacote da implementação corresponde ao valor da sobreposição do dispositivo para verificar se apenas apps confiáveis e pré-instalados estão vinculados.

Oferecer suporte a interfaces HAL de rádio

Para ativar o recurso de seleção de domínio, ofereça suporte às seguintes interfaces HAL de rádio necessárias:

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

Validação

Para testar se a estrutura de telefonia responde corretamente à DomainSelectionService interface, execute os testes do conjunto de teste de compatibilidade (CTS, na sigla em inglês) em DomainSelectionServiceTestOnMockModem.