检查wifi扫描是否完成

时间:2013-07-15 09:23:40

标签: android android-wifi

我正在编写一个代码,用于连续获取该范围内所有接入点的信息。

这是我的代码:

       myRunnable = new Runnable() {
       @Override public void run() {
       while(){
       wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
       wifi.startScan(); 
       List<ScanResult>results= wifi.getScanResults();
        try{
          //data Logging
            }  
           } 
         } 
        };

      myThread = new Thread(myRunnable);
      myThread.start();

由于反复连续扫描和记录数据,我想在记录数据之前检查扫描是否完成。 在记录数据之前,是否有任何标志或函数检查wifi.startScan()是否完成。 你能帮我解决一下代码吗?

3 个答案:

答案 0 :(得分:4)

  

我想在记录数据之前检查扫描是否完成。是   有任何标志或函数检查wifi.startScan()是   在记录数据之前是否完成。请你帮助我好吗   带代码。

是的,为此目的指定了机制。要实现目标,您需要实施BroadcastReceiver来监听WiFi次扫描。

您需要的只是使用适当的BroadcastReceiver创建IntentFilter。所以你需要这个过滤的动作:

WifiManager.SCAN_RESULTS_AVAILABLE_ACTION

此操作表示已完成接入点扫描,并且结果可用。然后只需创建BroadcastReceiver(静态或动态,无关紧要)。

如果您不知道如何开始,请查看本教程:

答案 1 :(得分:1)

您需要实施BroadcastReceiver监听WifiManager.startScan()返回的扫描结果。 onReceive()允许您直接访问扫描结果。扫描完成大约需要1秒钟并触发onReceive() ...

答案 2 :(得分:1)

为了建立上面的答案,我只想添加相关代码来举例。

<强> 1。注册活动

// don't forget to set permission to manifest
wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
context.registerReceiver(this,new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
//check if WIFI is enabled and whether scanning launched
if(!wifiManager.isWifiEnabled() || !wifiManager.startScan())
{
  throw new Exception("WIFI is not enabled");
}

<强> 2。收到结果

要接收,注册的对象(在本例中为this)需要扩展BroadcastReceiver并实现以下方法:

public void onReceive(Context context, Intent intent) {
        List<ScanResult> result = wifiManager.getScanResults();
 }