我当前项目中的代码定期调用WifiManager.startScan方法并通过BroadcastReceiver获取结果:
void setupWifiScanner() {
final WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
final IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
registerReceiver(new BroadcastReceiver(){
public void onReceive(Context c, Intent i){
scanResultHandler(wifiManager.getScanResults());
wifiManager.startScan();
}
}, filter);
wifiManager.startScan();
}
当扫描2,5Ghz和5Ghz频段时,每隔2-3秒调用一次BroadcastReceiver;当扫描2,5Ghz频段时,每隔约800ms调用一次 - 这很好。但是,我面临一个烦人的问题。简而言之:
换句话说:getScanResults永远不会返回一个emtpy列表(应用程序启动后几秒钟的perhabs除外)。范围内有AP,返回的列表是最新的,或者范围内没有AP,列表已过期(包含最后看到的AP)。
我在Nexus 5上使用Android(4.4.4)测试,但我确信六个月前相同的代码在Galaxy Nexus上运行。
我已经了解了一个解决方法 - 只是对结果进行哈希处理,如果相同的哈希连续出现x次,我认为可以说这些数据不再有效了(至少AP的信号强度应该在多次扫描之间改变)。但也许我做错了什么,有一个简单的解决方案。感谢任何帮助。谢谢。