Android - zum Scannen von Access Points und wählen Sie das stärkste signal?

Ich bin derzeit beim schreiben einer Klasse in Android, wird nach access points Scannen, zu ermitteln, welche access-point hat den besten Empfang und dann eine Verbindung zu diesem access point.

So kann die Anwendung zum Scannen auf das verschieben und befestigen Sie diese neuen access points unterwegs.

Ich habe den scan und die Berechnung des besten signal zu arbeiten.

Aber wenn es um die Befestigung zu den besten access point, ich habe ein Problem.

Scheint es, dass enableNetwork(netid, othersTrueFalse) ist die einzige Methode für den Anbau an einen Access point, aber das verursacht Probleme, weil es aus meiner Scan-Ergebnisse, ich bin nicht in der Lage, um die id der access point mit dem stärksten signal.

Dies ist mein code:


public void doWifiScan(){

  scanTask = new TimerTask() {
  public void run() {
      handler.post(new Runnable() {
          public void run() {
               sResults = wifiManager.scan(getBaseContext()); 
               if(sResults!=null)
               Log.d("TIMER", "sResults count" + sResults.size());
               ScanResult scan = wifiManager.calculateBestAP(sResults);
               wifiManager.addNewAccessPoint(scan);
           }
       });
    }};

    t.schedule(scanTask, 3000, 30000); 
}

public ScanResult calculateBestAP(List<ScanResult> sResults){

     ScanResult bestSignal = null;
        for (ScanResult result : sResults) {
          if (bestSignal == null
              || WifiManager.compareSignalLevel(bestSignal.level, result.level) < 0)
            bestSignal = result;
        }

        String message = String.format("%s networks found. %s is the strongest. %s is the bsid",
                sResults.size(), bestSignal.SSID, bestSignal.BSSID);

        Log.d("sResult", message);
        return bestSignal;
}

public void addNewAccessPoint(ScanResult scanResult){

    WifiConfiguration wc = new WifiConfiguration();
    wc.SSID = '\"' + scanResult.SSID + '\"';
    //wc.preSharedKey  = "\"password\"";
    wc.hiddenSSID = true;
    wc.status = WifiConfiguration.Status.ENABLED;        
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
    wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
    int res = mainWifi.addNetwork(wc);
    Log.d("WifiPreference", "add Network returned " + res );
    boolean b = mainWifi.enableNetwork(res, false);        
    Log.d("WifiPreference", "enableNetwork returned " + b );

}

Wenn ich versuche, mit addNewAccessPoint(ScanResult scanResult), es fügt nur ein anderer AP auf der Liste in der Anwendung " Einstellungen mit den gleichen Namen als die mit dem besten signal, so dass ich am Ende mit Unmengen von Dubletten und nicht wirklich anbringen zu Ihnen.

Kann jemand mich in Richtung eine bessere Lösung?

Schreibe einen Kommentar