在Android中获得WiFi信号强度

Anu*_*shA 45 android android-wifi

我可以使用以下代码获得以dBm为单位的WiFi信号电平.

for (ScanResult result : wifiScanResultList) {
    int signalLevel = result.level;
}
Run Code Online (Sandbox Code Playgroud)

它给出了负面价值.当我们看到默认的系统WiFi设置并点击连接的WiFi网络时,它会给出"好"或"坏"作为信号强度.我们可以将这些负值过滤为"良好"信号强度或"差"信号强度的范围是多少?

Ala*_*lan 56

它是一个旧帖子,但这可能有助于某人......

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

文档:public static int calculateSignalLevel(int rssi,int numLevels)

  • 注意:docs说你需要应用程序上下文作为上下文! (3认同)
  • 如何知道信号强,非常强,即如果我们得到 3 ,4 那么字符串是什么 (2认同)

小智 25

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

优秀> -50 dBm

良好-50到-60 dBm

公平-60至-70 dBm

弱<-70 dBm


ddi*_*ego 20

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");
Run Code Online (Sandbox Code Playgroud)


Ole*_*huk 8

对,就是这样.这是表示接收信号功率的dBm值的方式.以下是维基百科的一些细节.

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

  • 我现在拒绝了这个,因为这个关于接收信号强度(RSSI)的答案是完全错误的。请做一些研究。这个答案在这里:/sf/answers/2358266641/ 是正确的。 (2认同)

Ajj*_*jji 5

你已经掌握了等级,所以我会告诉你如何将wifi分为高、中或低强度。下面是一段代码

    int level = result.level;

    if (level >= -50) {
        //Best signal
    } else if (level >= -70) {
        //Good signal         
    } else if (level >= -80) {
        //Low signal
    } else if (level >= -100) {
       //Very weak signal
    } else {
       //Too low signal
    }
Run Code Online (Sandbox Code Playgroud)