2017-07-19 110 views
0

我遇到了一个问题,当我调用“.getScanResults()”时,返回列表中的对象是相同的。我已经测试过这个并记录了结果来演示。.getScanResults()返回相同的对象

SSID:####,BSSID:C0:C1:C0:AB:42:DC,功能:[WEP] [ESS],电平:-51,频率:2412,时间戳:246825251245

SSID:####,BSSID:C0:C1:C0:AB:42:DC,功能:[WEP] [ESS],电平:-51,频率:2412,时间戳:246825251245

一切都完全一样,包括时间戳。我的代码如下。

public void checkNetwork(View view) { 
    wifi_manager.startScan(); 

    WifiScanReceiver wifiReciever = new WifiScanReceiver(); 
    registerReceiver(wifiReciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 
} 

class WifiScanReceiver extends BroadcastReceiver { 
    public void onReceive(Context c, Intent intent) { 
     if (intent.getAction() == WifiManager.SCAN_RESULTS_AVAILABLE_ACTION) { 

      List<ScanResult> wifi_scan_list = wifi_manager.getScanResults(); 

      int number_of_access_points = wifi_scan_list.size(); 

      for(int i = 0; i < number_of_access_points; i++) { 
       String data = wifi_scan_list.get(i).toString(); 

       writeToFile(data + System.getProperty("line.separator")); 
      } 

      wifi_scan_list.clear(); 
     } 
    } 
} 
+0

根据https://stackoverflow.com/questions/8763397/how-to-synchronize-wifimanager-startscan-and-wifimanager-getscanresults,您可能需要考虑将结果存储在“Set”中,以便自动删除重复项为你。 – stkent

+0

@stkent感谢您的回复。我尝试将List更改为Set,但是,该类不允许这样做。铸造也不起作用。有任何想法吗? –

+0

我在下面写了一个更完整的答案;尝试一下,让我知道它是如何去。 – stkent

回答

0

尝试用

List<ScanResult> raw_wifi_scan_list = wifi_manager.getScanResults(); 
Set<ScanResult> unique_wifi_scan_set = new HashSet(raw_wifi_scan_list); 
List<ScanResult> wifi_scan_list = new Arraylist(unique_wifi_scan_set); 

此代码替换

List<ScanResult> wifi_scan_list = wifi_manager.getScanResults(); 

  1. 检索的扫描结果的原始列表;
  2. creates a new HashSet并将所有原始扫描结果添加到该集(从而删除重复项);
  3. creates a new ArrayList只包含重复数据删除的扫描结果。

未经测试,我不能100%确定原始列表的顺序将保留在最终列表中;但是,从您的其他代码看,这对您的使用情况似乎并不重要。

相关问题