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

Para dispositivos com o Android 15 ou mais recente, implementar a seleção de domínio entre o serviço IMS e os serviços legados por redes comutadas por circuito usando a API do sistema DomainSelectionService. DomainSelectionService é uma interface bem definida entre a plataforma Android e o fornecedor, implementação da seleção de domínio. Essa interface permite que o fornecedor implemente fornecer informações de sinalização, como o domínio em que ligações efetuadas e mensagens SMS são colocados e a preferência de tipo de rede na varredura de rede, para a plataforma.

arquitetura-de-seleção de domínios

Figura 1. Diagrama da 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 AOSP em TelephonyDomainSelectionService. Para obter documentação 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, faça o seguinte: são necessárias:

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

  2. Adicione uma configuração à sobreposição do dispositivo para permitir que a plataforma seja vinculada ao implementação de DomainSelectionService.

  3. Suporte às interfaces 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 uma entrada de serviço no AndroidManifest.xml

Para que o app de seleção de domínio registre o serviço DomainSelectionService com o framework, adicione uma entrada de serviço ao 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 do serviço em AndroidManifest.xml precisa definir o seguinte atributos para o recurso de seleção de domínio funcionar.

  • directBootAware="true": permite que o serviço seja descoberto e executado por telefonia antes de o usuário desbloquear o dispositivo. O serviço não pode acessar criptografado pelo dispositivo antes que o usuário o desbloqueie. Para mais informações consulte Suporte ao modo de inicialização direta e Criptografia baseada em arquivo.

  • persistent="true": permite que o serviço seja executado persistentemente e não seja eliminados pelo sistema para recuperar a memória. Esse atributo funciona somente se o é criado como um app do sistema.

  • permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE": garante que apenas um processo com a permissão BIND_DOMAIN_SELECTION_SERVICE concedidas a ele podem se vincular ao app. Isso evita que um app não autorizado seja vinculado a o serviço, porque apenas aplicativos do sistema podem receber a permissão pelo de análise de dados em nuvem.

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

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

Para que a plataforma seja vinculada 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 recursos de download de terceiros, DomainSelectionService, o aplicativo de seleção de domínio precisa ser um app do sistema que fica no /system_ext/priv-app/ ou no /product/priv-app/ do Compute Engine. O framework verifica se o nome do pacote da implementação corresponde ao valor de sobreposição do dispositivo para garantir que apenas apps pré-instalados confiáveis sejam presos.

Suporte a interfaces HAL de rádio

Para ativar o recurso de seleção de domínio, ofereça suporte à seguinte HAL de rádio necessária. - interface:

  • 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 o framework de telefonia responde adequadamente ao DomainSelectionService, execute os testes CTS em DomainSelectionServiceTestOnMockModem.