我已經創建了wi-fi掃描儀。它不斷掃描可用的Wi-Fi網絡。但我的問題是,爲什麼如果我實際上可以運行掃描(每隔x秒調用一次計時器startScan()
)並且在不創建廣播接收機的情況下接收相同的結果,那麼爲什麼還需要廣播接收機?無廣播接收器的Wi-Fi掃描?
i = new IntentFilter();
i.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
receiver = new BroadcastReceiver(){
public void onReceive(Context c, Intent i){
WifiManager w = (WifiManager) c.getSystemService(Context.WIFI_SERVICE);
List<ScanResult> l = w.getScanResults();
for (ScanResult r : l) {
// do smth with results
}
// log results
}
};
在掃描方式,掃描按鈕被按下我之後被調用有:
timer = new Timer(true);
timer.schedule(new WifiTimerTask(), 0, scanningInterval);
registerReceiver(receiver, i);
其中WifiTimerTask
是
publlic class WifiTimerTask extends TimerTask{
@Override
public void run(){
wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
if (wifi.isWifiEnabled()) {
wifi.startScan();
List<ScanResult> sc = wifi.getScanResults();
for (ScanResult r : l) {
// do smth with results
}
// log results
}
}
}
這在onCreate()
方法廣播接收機代碼
而關鍵是掃描可以通過機智hout registerReceiver(receiver,i)
。但是,只有當scanningInterval
低於2s時,則receiver
掃描結果和startScan()
不同步。我的意思是startScan()
結果不會改變,直到receiver
會得到新的結果。同時在logCat中我得到ERROR/wpa_supplicant(5837): Ongoing Scan action...
。似乎2s是最低的掃描間隔。如果我的假設錯誤,請糾正我。
向我們展示一段帶有廣播接收器,意圖過濾器等的代碼。可能這個代碼有一些好處。 – 2011-06-10 10:48:44