web-dev-qa-db-fra.com

Obtenir la puissance du signal WiFi dans Android

Je peux obtenir le niveau du signal WiFi en dBm en utilisant le code suivant.

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

Il donne une valeur négative. Lorsque nous voyons le paramètre Wi-Fi du système par défaut et que nous cliquons sur le réseau Wi-Fi connecté, cela donne "Bon" ou "Mauvais" comme force du signal. Quelle est la plage dans laquelle nous pouvons filtrer ces valeurs négatives en tant que force de signal "bonne" ou force de signal "mauvaise"?

40
AnujAroshA

c'est un ancien poste mais cela pourrait aider quelqu'un ...

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

Documentation: public static int CalculateSignalLevel (int rssi, int numLevels)

51
Alan

Veuillez vérifier comment les valeurs dBm de la puissance du signal sans fil reçue sont représentées.

Excellent> -50 dBm

Bon -50 à -60 dBm

Passable -60 à -70 dBm

Faible <-70 dBm

23
Nisha Salim
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");
17
ddiego

Oui, exactement. C'est ainsi que les valeurs dBm de la puissance du signal reçu sont représentées. Voici quelques détails sur Wikipedia.

-100 signifie la valeur la plus basse (pas de signal du tout) et 0 signifie un signal extrêmement bon (100%)

8
Oleksandr Kravchuk

Vous avez déjà les niveaux, donc je vais vous dire comment classer ce wifi en force élevée, moyenne ou faible. Voici le code

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
    }
3
Ajji