Получение уровня сигнала Wi-Fi в Android
Я могу получить уровень сигнала WiFi в дБм, используя следующий код.
for (ScanResult result : wifiScanResultList) {
int signalLevel = result.level;
}
Это дает отрицательное значение. Когда мы видим настройку Wi-Fi системы по умолчанию и нажимаем на подключенную сеть Wi-Fi, в качестве силы сигнала отображается "Хорошо" или "Плохо". В каком диапазоне мы можем отфильтровать эти отрицательные значения как "хороший" уровень сигнала или "плохой" уровень сигнала?
Ответы
Ответ 1
его старый пост, но это может помочь кому-то...
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
int numberOfLevels = 5;
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int level = WifiManager.calculateSignalLevel(wifiInfo.getRssi(), numberOfLevels);
Документация: public static int calculateSignalLevel (int rssi, int numLevels)
Ответ 2
Пожалуйста, проверьте, как представлены значения дБм для принимаемой мощности беспроводного сигнала.
Отлично > -50 дБм
Хорошее от -50 до -60 дБм
Ярмарка от -60 до -70 дБм
Слабый < -70 дБм
Ответ 3
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");
Ответ 4
Да, точно. Таким образом представлены значения dBm для мощности принимаемого сигнала. Вот некоторые подробности в Википедии.
-100 означает наименьшее значение (вообще никакой сигнал), а 0 означает чрезвычайно хороший сигнал (100%)
Ответ 5
У вас уже есть уровни, поэтому я расскажу вам, как классифицировать этот Wi-Fi на высокую, среднюю или низкую силу. Ниже приведен код
int level = result.level;
if (level <= 0 && level >= -50) {
//Best signal
} else if (level < -50 && level >= -70) {
//Good signal
} else if (level < -70 && level >= -80) {
//Low signal
} else if (level < -80 && level >= -100) {
//Very weak signal
} else {
// no signals
}