4

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

这是我的代码:

       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() 是否完整。你能帮我写一个代码吗?

4

3 回答 3

5

我想在记录数据之前检查扫描是否完成。在记录数据之前,是否有任何标志或函数检查 wifi.startScan() 是否完整。你能帮我写一个代码吗?

是的,为此目的指定了mechanizm。为了达到你的目标,你需要实现BroadcastReceiver监听WiFi扫描。

您需要做的就是BroadcastReceiver使用适当IntentFilter的 . 所以你需要这个过滤器操作:

WifiManager.SCAN_RESULTS_AVAILABLE_ACTION

此操作意味着接入点扫描已完成,并且结果可用。然后只是创建BroadcastReceiver(静态或动态,没关系)。

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

于 2013-07-15T10:00:17.807 回答
1

您需要对BroadcastReceiverWifiManager.startScan(). onReceive()允许您直接访问扫描结果。扫描完成并触发大约需要 1 秒onReceive()...

于 2013-07-15T09:26:03.750 回答
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();
 } 
于 2016-01-05T18:06:11.617 回答