Dispositivos Android sem equilíbrio de dados permitem a passagem do tráfego de rede, exigindo que operadoras e empresas de telecomunicações implementem protocolos de mitigação. O Android implementa uma solução genérica que permite que operadoras e empresas de telecomunicações indiquem quando um dispositivo está desequilibrado.
A plataforma Android fornece um aplicativo de operadora padrão com um comportamento padrão para mitigação de tráfego com base no sinal de detecção de portal cativo. Também oferece às operadoras e OEMs a oportunidade de personalizar o comportamento com baixo custo e grande flexibilidade.
Exemplos e fonte
O aplicativo da operadora padrão está localizado em platform/frameworks/base/packages/CarrierDefaultApp/ .
Implementação
O aplicativo da operadora padrão é configurado para fornecer uma experiência melhor para operadoras não configuradas imediatamente. As operadoras podem usar esse comportamento padrão. Eles também podem substituir o comportamento padrão adicionando mapeamentos de ação de sinal ao arquivo XML de configuração da operadora. Eles podem decidir não usar o aplicativo padrão e, em vez disso, usar privilégios UICC com seu próprio aplicativo de operadora independente.
Introdução à implementação
Sinais
A estrutura do Android oferece suporte à configuração de ações para os seguintes sinais parametrizados:
-
TelephonyIntents.ACTION_CARRIER_SIGNAL_REDIRECTED
-
TelephonyIntents.ACTION_CARRIER_SIGNAL_REQUEST_NETWORK_FAILED
Esses sinais estão localizados em frameworks/base/telephony/java/com/android/internal/telephony/TelephonyIntents.java
.
Ações apoiadas
O aplicativo da operadora padrão define um conjunto de ações suportadas que podem ser mapeadas para sinais suportados. Eles são definidos em CarrierActionUtils.java
:
public static final int CARRIER_ACTION_ENABLE_METERED_APNS = 0; public static final int CARRIER_ACTION_DISABLE_METERED_APNS = 1; public static final int CARRIER_ACTION_DISABLE_RADIO = 2; public static final int CARRIER_ACTION_ENABLE_RADIO = 3; public static final int CARRIER_ACTION_SHOW_PORTAL_NOTIFICATION = 4; public static final int CARRIER_ACTION_SHOW_NO_DATA_SERVICE_NOTIFICATION = 5; public static final int CARRIER_ACTION_CANCEL_ALL_NOTIFICATIONS = 6;
Observação: se uma operadora implementar seu próprio aplicativo independente, ela poderá implementar suporte para sinais diferentes dos mencionados nesta seção. Eles também podem definir e configurar suas próprias ações.
Mapeamentos de ação de sinal padrão
Configure ações padrão seguindo este processo:
- Defina uma chave para sinais suportados.
Os mapeamentos padrão de sinal para ação são definidos em
CarrierConfigManager.java
. Cada um dos sinais suportados possui uma chave:public static final String KEY_CARRIER_DEFAULT_ACTIONS_ON_REDIRECTION_STRING_ARRAY = "carrier_default_actions_on_redirection_string_array"; public static final String KEY_CARRIER_DEFAULT_ACTIONS_ON_DCFAILURE_STRING_ARRAY = "carrier_default_actions_on_dcfailure_string_array";
- Associe ações padrão às chaves de sinalização.
Os IDs de ação padrão estão associados às chaves de sinal:
sDefaults.putStringArray(KEY_CARRIER_DEFAULT_ACTIONS_ON_REDIRECTION_STRING_ARRAY, new String[]{ "1, 4" //1: CARRIER_ACTION_SHOW_PORTAL_NOTIFICATION //4: CARRIER_ACTION_DISABLE_METERED_APNS });
A estrutura de telefonia mapeia essas ações para os sinais correspondentes.
Substituindo ações padrão
Você pode definir ações customizadas para sinais suportados no arquivo XML de configuração da operadora associando IDs de ação às chaves de sinal (definidas em CarrierConfigManager.java
). Por exemplo, o mapeamento a seguir desativa APNs medidos e mostra uma notificação do portal sobre redirecionamento:
<string-array name="carrier_default_actions_on_redirection_string_array" num="2"> <item value="1" /> <item value="4" /> </string-array>
A estrutura de telefonia carrega essas configurações e substitui as ações padrão.
Validação
Não há testes CTS, CTS Verifier ou GTS para esse recurso.
Use estes testes de validação manuais para validar o recurso:
- Valide a notificação de sinal de desequilíbrio do dispositivo da empresa de telecomunicações.
- Verifique a limitação de redirecionamento de tráfego durante o estado de desequilíbrio e o Wi-Fi desligado.
- Verifique se o tráfego de rede está desativado e a IU de notificação aparece durante o estado desequilibrado.
- Valide a função de chamada de voz/VoLTE durante o estado de desequilíbrio.
- Verifique se a videochamada está bloqueada em estado desequilibrado.
- Com o Wi-Fi ativado, verifique se o usuário pode continuar navegando na web e se o tráfego de navegação não ativa o tráfego de rede enquanto estiver em estado desequilibrado.
- Valide as funções Wi-Fi, WFC e Bluetooth durante o estado de desequilíbrio.
- Desligue o Wi-Fi. Verifique a UI de notificação de desequilíbrio e se o tráfego de navegação normal não é redirecionado para o site de registro da empresa de telecomunicações. Verifique se clicar no link na interface de notificação leva o navegador ao site de registro da empresa de telecomunicações.
- Verifique se a alternância do modo avião não redefine o estado de limitação de tráfego.
- Verifique se a troca de um SIM em serviço redefine o estado do tráfego da rede.
- Verifique se a reinserção do SIM desequilibrado reinicia o redirecionamento de tráfego e obtém novamente a limitação do tráfego de rede.
- Verifique se a reinicialização do telefone reativa o redirecionamento e traz de volta a aceleração do tráfego e a interface de notificação.
- Toque na notificação “captiveportal”. Verifique se uma conexão de rede restrita foi estabelecida para permitir que o usuário adicione créditos.
- Verifique se a recarga ou reativação do saldo do SIM faz com que o tráfego da rede celular se recupere e que o link Telco e nenhuma notificação de saldo desapareçam.
- Teste de sanidade após recuperação do serviço de dados.
O aplicativo padrão fornece alguns exemplos de testes de unidade e um script para executá-los (consulte tests/runtest.sh
). Ao implementar uma versão ou comportamento personalizado, você deve espelhar essas personalizações em testes de unidade dedicados.