Kod shouldSwitchNetwork()
najlepiej wyjaśnia, co robi. To po prostu sztucznie zmniejsza RSSI Wi-Fi (wskazanie siły odbieranego sygnału), aby zachęcić maszynę stanu WiFi do podjęcia decyzji o przełączeniu połączenia z Wi-Fi na sieć komórkową. Wokół linii 3559 WifiStateMachine.java ( linia 4262 dla Androida 6.0.1_r10):
int rssi = mWifiInfo.getRssi() - 6 * mAggressiveHandover
+ (homeNetworkBoost ? WifiConfiguration.HOME_NETWORK_RSSI_BOOST : 0);
Zmienna mAggressiveHandover
to int
, że jest ustawiony na 0 lub 1 w ustawieniach Developer :
private void writeWifiAggressiveHandoverOptions() {
mWifiManager.enableAggressiveHandover(mWifiAggressiveHandover.isChecked() ? 1 : 0);
}
rssi
Zmienna przechodzi do wpływu jaki połączenie jest sklasyfikowany: isBadRSSI
, isLowRSSI
, lub isHighRSSI
.
Co do tego, dlaczego jest ukryty w opcjach programisty, powiedziałbym, że dzieje się tak, ponieważ wydaje się nieco hackerski, z pozornie arbitralnym skalarem (6), który wymyślił pewien deweloper, aby popchnąć zachowanie w pożądanym kierunku. Google prawdopodobnie nie ma pewności co do konsekwencji tego ustawienia i optymalnego sposobu dostosowania rssi
. Jeśli się mylę i to ma jakiś sens, z przyjemnością to przyznam i wyjaśnię tutaj, dlaczego.
Wyłączenie tego ustawienia NIE powoduje całkowitego wyłączenia przekazywania komórkowego . Połączenie Wi-Fi nadal otrzymuje wynik i jest wyłączane, jeśli wynik jest zbyt niski. Ale hej, początkowy wynik jest również ustalany arbitralnie.