2013-07-15 22 views
3

我正在编写一个代码,以便连续获取范围内所有接入点的信息。要检查无线扫描是否完成

这里是我的代码:

 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()是否完整。 你能帮我解决一个问题吗?

回答

1

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

+0

根据我的经验,在某些设备上秒25+秒。 – naXa

4

我想检查扫描是否完成之前记录数据。 有没有任何标志或功能,检查wifi.startScan()是否 完成或不记录数据之前。你能帮我 出一个代码。

是的,有机械指定为此目的。要达到您的目标,您需要执行BroadcastReceiver,该程序将侦听WiFi扫描。

所有你需要的是创建BroadcastReceiver与适当的IntentFilter。因此,你需要这个动作过滤器:

WifiManager.SCAN_RESULTS_AVAILABLE_ACTION 

这一行动意味着,接入点扫描已完成,结果是可用的。然后创建BroadcastReceiver(静态或动态,没关系)。

如果你不知道如何下手,看看这个教程:

0

要对以上问题的答案建立,我只是想补充相关的代码给一个例子。

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.接收到该结果

要接收,注册(在这种情况下,这)对象需要延伸BroadcastReceiver和实现以下方法:

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