只有在调用wifi.startScan时才能获得wifi扫描的结果

时间:2014-01-03 21:50:50

标签: android wifimanager

我只想在调用startScan()时获得WiFi扫描的结果,但我得到的结果是,即使我只调用startScan()一次,结果也会不断变化。我的观点是,我只想在调用startScan()时更新扫描结果。

我读到WIFI_MODE_SCAN_ONLY,它说

  

在此Wi-Fi锁定模式下,Wi-Fi将保持活动状态,但仅限于此   将支持的操作是启动扫描,以及   随后报告扫描结果。不会有任何尝试   自动连接到记住的接入点,也不会定期   自动执行扫描以查找记住的访问点。   在此模式下,应用程序必须明确请求扫描。

除非我打电话给startScan(),否则我不想定期扫描,但我不知道是否设置了我试图通过这种方式的标志

      receiverWifi = new WifiReceiver();
      registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

非常感谢任何帮助,我一直在努力解决这个问题。

1 个答案:

答案 0 :(得分:3)

我认为OP已找到一些解决方案或解决方法。如果不是,并且对于其他任何人(像我一样)寻找一个简单的解决方案,这就是我所做的:

  1. 声明一个全局变量: Boolean singleScanMode = false;

  2. 创建方法并在需要扫描可用AP时调用它:

  3. public void scanAps(){

    WifiManager tempWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    // set singleScanMode = true so you can collect scan data
    singleScanMode = true;
    // add intent filters to enable auto scan 
    IntentFilter i = new IntentFilter(); 
    i.addAction(tempWifiManager.SCAN_RESULTS_AVAILABLE_ACTION); 
    
    registerReceiver(new BroadcastReceiver() { 
        @Override 
        public void onReceive(Context context, Intent intent) { 
            //ignore scan results unless singleScanMode is set to 
            if (singleScanMode) { 
                List<ScanResult> results = tempWifiManager.getScanResults(); 
                Iterator<ScanResult> iterator = results.iterator(); 
                Toast.makeText(context, "Total APs found: "  
                + results.size(), Toast.LENGTH_SHORT).show();
    
                while (iterator.hasNext()) { 
                    ScanResult next = iterator.next();  
                    final String bssid = next.BSSID; // MAC address 
                    final String ssid = next.SSID; // AP name 
                    final int rssi = next.level; // Received Signal Strength Indicator 
                    // do anything else you want 
                }  // end while
                //set it back to false
                singleScanMode = false; 
            }  //end if
        }, i); 
        tempWifiManager.startScan();
    

    }

    请注意,只要活动正在运行,只要扫描了wifi,Android就会向您报告活动。但这样你只需忽略扫描结果。如果其他人有更好的主意,请分享。希望它有所帮助!