Attualmente sto provando a scrivere una classe in Android che effettuerà la scansione dei punti di accesso, calcolerà quale punto di accesso ha il segnale migliore e poi si connetterà a quel punto di accesso.Android - Come scansionare i punti di accesso e selezionare il segnale più forte?
Così l'applicazione sarà in grado di eseguire la scansione in movimento e allegare a nuovi punti di accesso in movimento.
Ho la scansione e il calcolo del segnale migliore funzionante.
Ma quando si tratta di collegarsi al punto di accesso migliore, ho problemi.
Sembra che enableNetwork (netid, othersTrueFalse) sia l'unico metodo per collegarsi a un punto di accesso ma questo causa problemi come dai miei risultati di scansione Non sono in grado di ottenere l'id del punto di accesso con il segnale più forte.
Questo è il mio codice:
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);
}
Quando provo ad usare addNewAccessPoint (ScanResult scanResult) si aggiunge solo un altro APla lista nell'applicazione impostazioni con lo stesso nome di quella con il segnale migliore, quindi finisco con un sacco di duplicati e in realtà non li leggo.
Qualcuno può indicarmi la direzione di una soluzione migliore?