2010-12-07 28 views
6

我试图检测无线连接中的信号强度变化。我很困惑我应该在我的BroadcastReceiver中使用哪种方法。使用getConnectionInfo()和getScanResults()之间有什么区别 - 从那里我可以使用相关的方法来获取rssi值?getConnectionInfo()和getScanResults()检测信号强度变化的区别

例如:如果我使用getConnectionInfo(),那么稍后我会使用getRssi()。或者我可以使用getScanResults()和“level”属性。

我使用吐司显示它们的值,它并不总是显示相同的值。当wifi conn丢失时,getConnectionInfo()。getRssi()显示-200,而result.level仍显示其先前的值。

有什么想法?谢谢!

String netSSID = wifi.wifiMgr.getConnectionInfo().getSSID(); 
int netRSSI = wifi.wifiMgr.getConnectionInfo().getRssi(); 

List<ScanResult> results = wifi.wifiMgr.getScanResults(); 
for (ScanResult result : results) { 
    if (result.SSID.equalsIgnoreCase(netSSID)) { 
     anothernetRSSI = result.level; 
    } 
} 

回答

1

仅当您使用startScan()时,才使用getScanResults()。扫描是异步的,在完成时发送SCAN_RESULTS_AVAILABLE_ACTION广播。并且,扫描结果将针对扫描发现的任何接入点,其中可能包括与您连接的接入点以外的接入点,如果您连接了任何接入点。

+0

*请参阅代码片段*我使用这两种方法来检测当前连接的rssi值。是的,我使用startScan()。好的,在这种情况下,使用getConnectionInfo()。getRssi()是不对的。那么发送RSSI_CHANGED_ACTION广播然后使用intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI,0)来获取新的rssi值呢?这是否与SCAN_RESULTS_AVAILABLE_ACTION一样,可以检索任何接入点?所以只要这个值与前一个值不同,它可能会返回另一个AP的rssi值? – springrolls 2010-12-08 08:58:54

2

简而言之,RSSI仅在您连接的设备和接入点之间可用。 (RSSi是您连接到的接入点的信号电平)

但是,当您想要获得所有无线接入点的级别时,您应该使用startScan并获取scanResult并获取每个级别的属性在范围内的WiFi接入点。

这是有用吗?