Getting WiFi signal strength in Android

后端 未结 5 630
别那么骄傲
别那么骄傲 2020-11-29 21:35

I can get WiFi signal level in dBm using following code.

for (ScanResult result : wifiScanResultList) {
    int signalLevel = result.level;
}
相关标签:
5条回答
  • 2020-11-29 21:58

    Please check how dBm values for received Wireless Signal power are represented.

    Excellent >-50 dBm

    Good -50 to -60 dBm

    Fair -60 to -70 dBm

    Weak < -70 dBm

    0 讨论(0)
  • 2020-11-29 22:02

    Yes, exactly. This is how dBm values for received signal power are represented. Here are some details at Wikipedia.

    -100 means lowest value (no signal at all), and 0 means extremely good signal (100%)

    0 讨论(0)
  • 2020-11-29 22:08

    its an old post but this might help someone...

    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)

    0 讨论(0)
  • 2020-11-29 22:12

    You already have got the levels, So i will tell you how to classify that wifi into high,medium or low strength. Following is the 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
        }
    
    0 讨论(0)
  • 2020-11-29 22:15
    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 讨论(0)
提交回复
热议问题