Para dispositivos com o Android 15 ou mais recente, é possível
implementar a seleção de domínio
entre o serviço IMS e os serviços legados em redes comutadas por circuitos usando
a API do sistema DomainSelectionService
. 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 realizadas e os SMS
são colocados e a preferência de tipo de rede na verificação de rede, à plataforma.
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 no
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:
Crie um app de seleção de domínio. O serviço precisa ser definido no arquivo
AndroidManifest.xml
.Uma configuração foi adicionada à sobreposição do dispositivo para permitir que a plataforma seja vinculada à implementação
DomainSelectionService
.Ofereça 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 a 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 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 atributos
a seguir 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 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 eliminado pelo sistema para recuperar a memória. Esse atributo funciona somente se o app for criado como um app do sistema.permission="android.permission.BIND_DOMAIN_SELECTION_SERVICE"
: garante que apenas um processo que tenha a permissãoBIND_DOMAIN_SELECTION_SERVICE
concedida a ele possa se vincular ao app. Isso impede que um app malicioso se vincule ao serviço, porque apenas apps do sistema podem receber a permissão do framework.
O serviço também precisa especificar o elemento intent-filter
com a
açã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:
config_domain_selection_service_component_name
: o nome do componente (uma stringComponentName
achatada) para o serviçoDomainSelectionService
Como o Android não oferece suporte a apps com implementações
DomainSelectionService
para download de terceiros, o app de seleção de domínio precisa ser um
app do sistema que resida na pasta /system_ext/priv-app/
ou /product/priv-app/
. O framework verifica se o nome do pacote da implementação
corresponde ao valor da sobreposição do dispositivo para garantir que apenas apps confiáveis e pré-instalados sejam
vinculados.
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:
-
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);
Validação
Para testar se o framework de telefonia responde corretamente à
interface DomainSelectionService
, execute os testes do CTS em
DomainSelectionServiceTestOnMockModem
.