Подтвердить что ты не робот

Получение уровня сигнала Wi-Fi в Android

Я могу получить уровень сигнала WiFi в дБм, используя следующий код.

for (ScanResult result : wifiScanResultList) {
    int signalLevel = result.level;
}

Это дает отрицательное значение. Когда мы видим настройку Wi-Fi системы по умолчанию и нажимаем на подключенную сеть Wi-Fi, в качестве силы сигнала отображается "Хорошо" или "Плохо". В каком диапазоне мы можем отфильтровать эти отрицательные значения как "хороший" уровень сигнала или "плохой" уровень сигнала?

4b9b3361

Ответ 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
    }