2012-12-18 159 views
25

我可以使用以下代码以dBm为单位获取WiFi信号级别。Android中获取WiFi信号强度

for (ScanResult result : wifiScanResultList) { 

    int signalLevel = result.level; 
} 

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

+3

是不是dBm的为最部分否定? –

+0

是的,那是真的。我需要的是我可以申请自己的WiFi处理Android应用程序的标准范围。当我在真实设备上点击连接的WiFi网络时,它会给我带来“良好”的信号强度。我想知道他们如何衡量它作为一个“好”的力量。谢谢回复。 – AnujAroshA

+0

这是你的问题的答案:http://androidxref.com/4.2_r1/xref/frameworks/base/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java#103 –

回答

8

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

-100意味着最低值(无信号的话),0表示非常好的信号(100%)

+0

0不是100%。接收的信号强度可以高于0 dBm。 > = -51 dBm通常意味着100%。 – Thomas

+0

@托马斯什么是废话。在做这个声明之前,你是否甚至检查过链接的维基百科页面或者自己试着研究它? –

+0

Unlinke你我好像对无线系统有点了解,否则你不会写下“无意义的”。您的Wikipedia链接仅列出广播电台的发射功率等。还有-100不是最低值...例如GSM仍然在-100 dBm以下工作。 – Thomas

37

其旧的文章,但是这可能帮助别人......

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)

+0

如何知道信号强,非常强,即如果我们得到了3,4,那么字符串是什么 –

+0

注意:docs说你需要应用上下文作为上下文! – chksr

8
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

像冠军一样工作:D –

16

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

优秀> -50dBm的

良好-50至-60 dBm的

博览会-60至-70 dBm的

弱< -70dBm的