研究生方向是室内定位,之前利用安卓平台写了一个定时扫描获取WiFi列表的app:
当时遇到的主要问题是:通过startScan扫描过后wifi列表并不能马上更新,几次实验发现2秒左右才更新一次,当时也没找到更好的解决办法。
现在(2019-08)遇到的主要问题是:通过startScan扫描过后,每次获得的wifi列表都是相同的,并且startScan函数在安卓9.0已经被废弃了,Google官方说是为了省电考虑,目前前台程序允许2分钟扫描4次,后台等待的时间更长,有没有其他办法呢?这里是stackoverflow的上面该问题的讨论。
之前程序主要代码如下:
private WifiManager mWifiManager;
private List<ScanResult> mWifiList=new ArrayList<>();
private boolean isUpdate=false;
// 获得WifiManager
this.mWifiManager=(WifiManager)this.getApplicationContext().getSystemService(WIFI_SERVICE);
// 注册广播接收器
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
registerReceiver(receiver,intentFilter);
//通过广播接收器获得扫描结果,因为在startScan()之后立马调用getScanResults()获得的扫描结果不是最新的
private BroadcastReceiver receiver= new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
//获得列表
mWifiList = mWifiManager.getScanResults();
isUpdate=false;
// TODO
}
}
};
// 一个主动扫描线程
Thread wifiThread = new Thread(){
@Override
public void run() {
super.run();
while (!isUpdate) {
mWifiManager.startScan();
isUpdate=true;
try {
sleep(2000); // 线程休眠时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
wifiThread.start();