私はwi-fiスキャナを作成しました。それは利用可能なWi-Fiネットワークを絶えずスキャンします。しかし、なぜ私は実際にスキャンを実行することができます(正確にstartScan()
タイマーと毎x秒を呼び出す)、ブロードキャスト受信機を作成せずに同じ結果を受信することができる場合、私の質問は、ブロードキャスト受信機を使用しないWi-Fiスキャンですか?
これはonCreate()
方法における放送受信機コードである:
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
}
}
}
ある
timer = new Timer(true);
timer.schedule(new WifiTimerTask(), 0, scanningInterval);
registerReceiver(receiver, i);
:スキャンボタンは私が押された後に呼び出される走査方法において
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
}
};
そして、スキャンはウィットで実行できるということですhout registerReceiver(receiver,i)
。ただし、scanningInterval
が2秒未満の場合にのみ、receiver
のスキャン結果とstartScan()
は同期しません。それによって、startScan()
の結果はreceiver
まで変更されず、新しい結果が得られます。一方logCatで私はERROR/wpa_supplicant(5837): Ongoing Scan action...
を得る。しかし、2sのように見えるスキャン間隔は最低です。私の前提が間違っていれば私を修正してください。
ブロードキャストレシーバー、インテントフィルターなどのコードを表示してください。このコードにはいくつかの利点があります。 –