2012-12-18 18 views
25

Mogę uzyskać poziom sygnału WiFi w dBm za pomocą następującego kodu.Uzyskiwanie siły sygnału WiFi w Androidzie

for (ScanResult result : wifiScanResultList) { 

    int signalLevel = result.level; 
} 

Daje wartość ujemną. Gdy widzimy domyślne ustawienia Wi-Fi w systemie i klikamy na podłączonej sieci Wi-Fi, jako moc sygnału podajemy "Dobre" lub "Złe". Jaki jest zakres, w którym możemy filtrować te ujemne wartości jako siłę sygnału "Dobra" lub "Zła"?

+3

nie jest dBm dla najbardziej część negatywna? –

+0

Tak, to prawda. Potrzebuję standardowego zakresu, który mogę zastosować do mojej własnej aplikacji do obsługi WiFi obsługującej Androida. Kiedy klikam na podłączoną sieć Wi-Fi na prawdziwym urządzeniu, daje mi to "dobrą" siłę sygnału. Chcę wiedzieć, jak mierzą to jako "dobrą" siłę. Dziękuję za odpowiedź. – AnujAroshA

+0

To jest odpowiedź na twoje pytanie: http://androidxref.com/4.2_r1/xref/frameworks/base/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java#103 –

Odpowiedz

8

Tak, dokładnie. Tak przedstawiają się wartości dBm dla mocy odbieranego sygnału. Here are kilka szczegółów w Wikipedii.

-100 oznacza najniższą wartość (brak sygnału w ogóle), a 0 oznacza bardzo dobry sygnał (100%)

+0

0 to nie 100% procent. Uzyskana siła sygnału może przekraczać 0 dBm. > = -51 dBm zwykle oznacza 100%. – Thomas

+0

@Thomas co za bzdury. Czy sprawdziłeś nawet linkowaną stronę Wikipedii lub spróbowałeś sam ją zbadać przed wydaniem tego oświadczenia? –

+0

Odłączcie od siebie, wydaje mi się, że wiem trochę więcej o systemie bezprzewodowym, jak się wydaje, inaczej nie napisalibyście "bezsensowności". Twój link do Wikipedii zawiera tylko informacje o sile transmisji stacji radiowych i tak dalej. Również -100 nie jest najniższą wartością ... GSM na przykład nadal pracuje poniżej -100 dBm. – Thomas

37

jego stary post, ale może to komuś pomóc ...

WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
int numberOfLevels = 5; 
WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 
int level = WifiManager.calculateSignalLevel(wifiInfo.getRssi(), numberOfLevels); 

Dokumentacja : public static int calculateSignalLevel (int rssi, int numLevels)

+0

jak poznać sygnał jest silny, bardzo silny, np. Jeśli mamy 3, 4 to, co jest ciągiem znaków –

+0

uwaga: dokumenty mówią, że potrzebujesz kontekstu aplikacji jako kontekstu! – chksr

8
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 

// Level of a Scan Result 
List<ScanResult> wifiList = wifiManager.getScanResults(); 
for (ScanResult scanResult : wifiList) { 
    int level = WifiManager.calculateSignalLevel(scanResult.level, 5); 
    System.out.println("Level is " + level + " out of 5"); 
} 

// Level of current connection 
int rssi = wifiManager.getConnectionInfo().getRssi(); 
int level = WifiManager.calculateSignalLevel(rssi, 5); 
System.out.println("Level is " + level + " out of 5"); 
+0

działa jak mistrz: D –

16

Proszę sprawdzić, w jaki sposób są reprezentowane wartości dBm dla odebranego sygnału Wireless Signal.

Doskonałe> -50 dBm

Dobry -50 do -60 dBm

Fair -60 do -70 dBm

Słaby < -70 dBm

Powiązane problemy