Ich versuche gerade, eine Klasse in Android zu schreiben, die nach Access Points scannt, berechnet, welcher Access Point das beste Signal hat, und dann eine Verbindung zu diesem Access Point herzustellen.Android - So scannen Sie Access Points und wählen das stärkste Signal aus?
So wird die Anwendung in der Lage sein, unterwegs zu scannen und unterwegs an neue Access Points anzuhängen.
Ich habe das Scannen und Berechnen des besten Signals funktioniert.
Aber wenn es darum geht, an den besten Zugangspunkt anzubringen, habe ich Probleme.
Es scheint, dass enableNetwork (netid, othersTrueFalse) ist die einzige Methode zum Anfügen an einen Access-Point, aber dies verursacht Probleme, wie von meinem Scan-Ergebnisse Ich bin nicht in der Lage, die ID des Access-Point mit dem stärksten Signal zu erhalten.
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, es addNewAccessPoint (ScanResult scanResult) zu verwenden, fügt nur eine weitere AP die Liste in den Einstellungen Anwendung mit dem gleichen Namen wie der mit dem besten Signal, so dass ich am Ende mit vielen Duplikaten und nicht wirklich an ihnen anhängen.
Kann mir jemand in Richtung einer besseren Lösung zeigen?