2017-03-15 1 views
0

Ich bin nicht in der Lage, die Wifi-Liste zu sortieren, ich bekomme doppelte WiFi SSIDs, also möchte ich Liste der einzigartigen SSIDs, die höhere Festigkeit hat. Sie können meinen folgenden Code sehen, aber keine korrekte WLAN-Liste erhalten.Wie vollständige Wifi Liste mit einzigartigen höheren Stärke in Android Wifi zu sortieren?

List<ScanResult> results = mWifiManager.getScanResults(); 

    int size = results.size(); 
    try { 
     for (int i = 0; i < results.size() - 1; i++) { 
      for (int k = i + 1; k < results.size(); k++) { 
       if (results.get(i).SSID.equals(results.get(k).SSID)) { 
        if (results.get(k).level > results.get(i).level) { 
         results.remove(i); 
        } else { 
         results.remove(k); 
        } 
       } 
      } 
     } 
    } catch (Exception e) 

    { 
     e.printStackTrace(); 
    } 

Antwort

0

merge ScanResults Verwendung HashMap, in dem Schlüssel String SSID sein. fügen Sie einfach Scheck auf die Existenz von bisher ScanResult hinzugefügt (in Iteration), dann beide level Werte vergleichen

edit:

List<ScanResult> results = mWifiManager.getScanResults(); 
HashMap<String, ScanResult> filtered = new HashMap<String, ScanResult>(); 
for(ScanResult sc : results){ 
    ScanResult prevScanResultOrNull = filtered.get(sc.SSID); 
    // compare lever with previous ScanResult, 
    // insert bigger value under SSID key, they are same 
    if(prevScanResultOrNull!=null) 
     filtered.put(prevScanResultOrNull.SSID, // or sc.SSID, whatever 
      prevScanResultOrNull.level > sc.level ? 
       prevScanResultOrNull : sc); 
    // no SSID in HashMap, so just put as highest value 
    else 
     filtered.put(sc.SSID, sc); 
} 

edit2:

wenn Sie noch List Schnittstelle verwenden möchten, dann:

results = new ArrayList<ScanResult>(filtered.values()); 
+0

Ich habe dich nicht bekommen, kannst du mir irgendein Beispiel geben. – Nayank

+0

check out my edit – snachmsm