在Android中获取WiFi信号强度

我可以使用以下代码以dBm为单位获得WiFi信号级别。

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

它给出了负值。 当我们看到默认的系统WiFi设置,并点击连接的WiFinetworking时,它会给出“好”或“坏”的信号强度。 我们可以将这些负值筛选为“良好”信号强度或“坏”信号强度的范围是什么?

  • 如何避免延迟在Android GCM消息/改变心跳
  • 如何在android模拟器中运行wifi对等应用程序..?
  • 如何在android中分别find特定应用程序的wifi和网络数据使用情况?
  • 如何处理wifi和移动数据之间的网络变化?
  • 在Android 6.x(Marshmallow)中以编程方式设置静态IP和网关
  • 如何提供选项,以selectWi - Fi或GPRS的networking连接在Android应用程序
  • 如何在Wi-Fi Direct场景中获取每个设备的IP地址?
  • 在manifest中声明的BroadcastReceiver没有接收广播
  • 它的旧post,但这可能有助于某人…

     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)

    请检查接收的无线信号功率的dBm值是如何表示的。

    优秀> -50 dBm

    良好-50至-60 dBm

    公平-60到-70 dBm

    弱<-70 dBm

    对,就是这样。 这就是接收信号功率的dBm值。 这里是维基百科的一些细节。

    -100表示​​最低值(根本没有信号),0表示非常好的信号(100%)

     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");