Я создал сканер 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...
.Похоже, 2s самый низкий интервал сканирования.Пожалуйста, поправьте меня, если мои предположения неверны.