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
低于2s,然后 receiver
扫描和 startScan()
不同步。我的意思是 startScan()
结果直到 receiver
将获得新的结果。同时,在logcat中我得到了 ERROR/wpa_supplicant(5837): Ongoing Scan action...
. 。好像2s是最低的扫描间隔。如果我的假设错了,请纠正我。
解决方案
你打电话时 startScan()
您不知道实际扫描将需要多长时间(一般来说,可能是1 ms或5小时)。所以你不能可靠地打电话 getScanResults()
您不知道扫描何时完成。
跟踪活动何时 getScanResults()
将返回更新扫描结果您需要订阅 SCAN_RESULTS_AVAILABLE_ACTION
.
不隶属于 StackOverflow