2017-07-19 115 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%確定原始列表的順序將保留在最終列表中;但是,從您的其他代碼看,這對您的使用情況似乎並不重要。

相關問題