Tôi hiện đang cố gắng viết một lớp trong Android sẽ Quét các điểm truy cập, tính điểm truy cập nào có tín hiệu tốt nhất và sau đó kết nối với điểm truy cập đó.Android - Cách quét Điểm Truy cập và chọn tín hiệu mạnh nhất?
Vì vậy, ứng dụng sẽ có thể quét khi di chuyển và đính kèm vào các điểm truy cập mới khi đang di chuyển.
Tôi có chức năng quét và tính toán tín hiệu tốt nhất đang hoạt động.
Nhưng khi nói đến việc gắn vào điểm truy cập tốt nhất tôi đang gặp sự cố. Có vẻ như enableNetwork (netid, othersTrueFalse) là phương pháp duy nhất để gắn vào một điểm truy cập nhưng điều này gây ra các vấn đề từ kết quả quét của tôi, tôi không thể lấy được id của điểm truy cập có tín hiệu mạnh nhất.
Đây là mã của tôi:
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);
}
Khi tôi cố gắng sử dụng addNewAccessPoint (ScanResult scanResult) nó chỉ thêm một AP để danh sách trong ứng dụng cài đặt có cùng tên với ứng dụng có tín hiệu tốt nhất, vì vậy tôi kết thúc với nhiều bản sao và không thực sự đính kèm với chúng.
Có ai có thể chỉ cho tôi theo hướng giải pháp tốt hơn không?