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();




 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值