2017-07-19 27 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では、結果を「セット」に保存して、重複が自動的に整理されるようにすることを検討してくださいあなたのために。 – stkent

+0

@stkentご回答いただきありがとうございます。私はリストをセットに変更しようとしましたが、クラスはそれを許可しません。キャストは機能しません。何か案は? –

+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%保証することはできません。しかし、残りのコードから、これはあなたのユースケースにとっては重要ではないようです。

関連する問題