私は現在、アクセスポイントをスキャンし、どのアクセスポイントが最適な信号を持っているかを計算して、そのアクセスポイントに接続するクラスをAndroidで作成しようとしています。
そのため、アプリケーションは移動中にスキャンして、外出先で新しいアクセスポイントに接続できるようになります。
最高の信号のスキャンと計算が機能しています。
しかし、最高のアクセスポイントに接続することになると、私は問題を抱えています。
enableNetwork(netid、othersTrueFalse)がアクセスポイントに接続する唯一の方法のようですが、スキャン結果から最も強い信号でアクセスポイントのIDを取得できないため、これにより問題が発生します。
これは私のコードです:
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 );
}
addNewAccessPoint(ScanResult scanResult)を使用しようとすると、設定アプリケーションのリストに、信号が最適なAPと同じ名前の別のAPが追加されるだけなので、重複が大量に発生し、実際にはそれらに接続されません。
誰かが私をより良い解決策の方向に向けることができますか?