Je suis actuellement en train d'essayer d'écrire une classe dans Android qui va rechercher les points d'accès, calculer quel point d'accès a le meilleur signal et ensuite se connecter à ce point d'accès. Ainsi, l'application pourra numériser en déplacement et se connecter à de nouveaux points d'accès en déplacement.Android - Comment scanner les points d'accès et sélectionner le signal le plus fort?
J'ai le balayage et le calcul du meilleur signal de travail.
Mais quand il s'agit de s'attacher au meilleur point d'accès, j'ai des problèmes. Il semble que enableNetwork (netid, othersTrueFalse) est la seule méthode pour attacher à un point d'accès, mais cela pose problème à cause de mes résultats d'analyse. Je n'arrive pas à obtenir l'identifiant du point d'accès avec le signal le plus fort.
Ceci est mon 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);
}
Lorsque je tente de l'utiliser ajoute juste addNewAccessPoint (ScanResult scanResult) un autre point d'accès à la liste dans l'application des paramètres avec le même nom que celui avec le meilleur signal, donc je me retrouve avec des charges de doublons et pas vraiment attachés à eux.
Quelqu'un peut-il me diriger vers une meilleure solution?