2010-12-07 64 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接入點。

這是有用嗎?