El código para shouldSwitchNetwork()
mejor explica lo que hace. Simplemente reduce artificialmente el WiFi RSSI (indicación de intensidad de señal recibida) para alentar a la máquina de estado WiFi a decidir cambiar la conexión de WiFi a la red celular. Alrededor de la línea 3559 de WifiStateMachine.java ( línea 4262 para Android 6.0.1_r10):
int rssi = mWifiInfo.getRssi() - 6 * mAggressiveHandover
+ (homeNetworkBoost ? WifiConfiguration.HOME_NETWORK_RSSI_BOOST : 0);
La variable mAggressiveHandover
es una int
que se establece en 0 o 1 por la configuración de Developer :
private void writeWifiAggressiveHandoverOptions() {
mWifiManager.enableAggressiveHandover(mWifiAggressiveHandover.isChecked() ? 1 : 0);
}
El rssi
variables va a influir en cómo la conexión se clasifica: isBadRSSI
, isLowRSSI
o isHighRSSI
.
En cuanto a por qué está oculto bajo las opciones del desarrollador, diría que es porque parece un poco hack, con un escalar aparentemente arbitrario (6) que algunos desarrolladores idearon para empujar el comportamiento en la dirección deseada. Google probablemente no esté seguro acerca de las consecuencias de esta configuración y la forma óptima de ajuste rssi
. Si me equivoco y esto es de alguna manera significativo, estoy feliz de admitirlo y explicar aquí por qué.
Desactivar esta configuración NO desactiva la transferencia celular por completo . La conexión WiFi todavía obtiene un puntaje y se desactiva si el puntaje es demasiado bajo. Pero bueno, la puntuación inicial también se establece arbitrariamente.