O código para shouldSwitchNetwork()
melhor explica o que faz. Reduz artificialmente o WiFi RSSI (indicação de intensidade do sinal recebido) para incentivar a máquina de estado do WiFi a decidir mudar a conexão do WiFi para a rede celular. Em torno da linha 3559 de WifiStateMachine.java ( linha 4262 para Android 6.0.1_r10):
int rssi = mWifiInfo.getRssi() - 6 * mAggressiveHandover
+ (homeNetworkBoost ? WifiConfiguration.HOME_NETWORK_RSSI_BOOST : 0);
A variável mAggressiveHandover
é um int
que é definido como 0 ou 1 pelas configurações Desenvolvedor :
private void writeWifiAggressiveHandoverOptions() {
mWifiManager.enableAggressiveHandover(mWifiAggressiveHandover.isChecked() ? 1 : 0);
}
A rssi
variável passa a influência como a conexão é classificada: isBadRSSI
, isLowRSSI
ou isHighRSSI
.
Quanto ao motivo pelo qual ele está oculto nas opções do desenvolvedor, eu diria que é porque parece um pouco imprudente, com um escalar aparentemente arbitrário (6) que alguns desenvolvedores inventaram para mudar o comportamento na direção desejada. O Google provavelmente está incerto sobre as consequências dessa configuração e a maneira ideal de se ajustar rssi
. Se eu estiver errado e isso for significativo, fico feliz em admitir e explicar aqui o porquê.
Desativar essa configuração NÃO desativa completamente a transferência de celular . A conexão Wi-Fi ainda recebe uma pontuação e é desativada se a pontuação for muito baixa. Mas ei, a pontuação inicial também é definida arbitrariamente.