Wi-Fiスキャナーを作成しました。利用可能な Wi-Fi ネットワークを継続的にスキャンします。しかし、私の質問は、実際にスキャンを実行し ( startScan()
x 秒ごとにタイマーで呼び出す)、ブロードキャスト レシーバーを作成せずに同じ結果を受け取ることができる場合、正確にブロードキャスト レシーバーが必要になるのはなぜですか?
onCreate()
これは、メソッド内のブロードキャスト レシーバ コードです。
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
}
}
}
そしてポイントは、スキャンがなくてもスキャンできることregisterReceiver(receiver,i)
です。ただし、scanningInterval
が 2 秒未満の場合のみ、結果をreceiver
スキャンし、startScan()
同期されません。つまり、新しい結果が得られるstartScan()
まで結果は変わらないということです。receiver
一方、logCat ではERROR/wpa_supplicant(5837): Ongoing Scan action...
. ただし、2 秒が最小のスキャン間隔のようです。私の仮定が間違っている場合は修正してください。