在Android中获得WiFi信号强度

时间:2012-12-18 12:12:03

标签: android android-wifi

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

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

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

6 个答案:

答案 0 :(得分:50)

这是一个老帖子,但这可能对某人有帮助......

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)

答案 1 :(得分:21)

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

优秀> -50 dBm

良好-50到-60 dBm

公平-60到-70 dBm

弱< -70 dBm

答案 2 :(得分:17)

contacts = request.args.getList('contact')
print(contacts) # ['me', 'others', 'hr'] 

答案 3 :(得分:8)

是的,确切地说。这是表示接收信号功率的dBm值的方式。 Here are维基百科的一些细节。

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

答案 4 :(得分:2)

您已经掌握了这些级别,因此,我将告诉您如何将wifi分为高强度,中强度或低强度。以下是代码

int级别= 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
    }

答案 5 :(得分:0)

我不知道其他值来自何处,但也有一些记录在案的值。
WifiManager.java中的常量:

MIN_RSSI:任何小于或等于 -100 的内容都会显示 0条

MAX_RSSI:任何大于或等于 -55 的内容都会显示最大条形图