ブロードキャストレシーバーなしでWi-Fiスキャン?
-
26-10-2019 - |
質問
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秒は最低のスキャン間隔のようです。私の仮定が間違っている場合は、私を修正してください。
解決
あなたが電話するとき startScan()
実際のスキャンにどれくらいの時間がかかるかわかりません(一般的に言えば、1ミリ秒または5時間になる可能性があります)。したがって、確実に電話することはできません getScanResults()
スキャンがいつ完了したかわからないように。
いついつイベントを追跡しますか getScanResults()
サブスクライブする必要がある更新スキャン結果を返します SCAN_RESULTS_AVAILABLE_ACTION
.