天天看点

Android 9如何主动扫描获得wifi列表?

研究生方向是室内定位,之前利用安卓平台写了一个定时扫描获取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();




           

继续阅读