Don*_*rty 8 android signals wifi wifimanager network-scan
我目前正在尝试在Android中编写一个类来扫描接入点,计算哪个接入点具有最佳信号,然后连接到该接入点.
因此,应用程序将能够在移动中扫描并随时附加到新的接入点.
我有扫描和计算最好的信号工作.
但是当涉及到附加到最佳接入点时,我遇到了麻烦.
似乎enableNetwork(netid,othersTrueFalse)是附加到Access点的唯一方法,但这会导致我的扫描结果出现问题我无法获得信号最强的接入点的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);
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
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 );
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用addNewAccessPoint(ScanResult scanResult)时,它只是将另一个AP添加到设置应用程序中的列表,其名称与具有最佳信号的名称相同,因此我最终得到了大量重复项而不是实际附加到它们.
有人能指出我更好的解决方案吗?
小智 3
只需改变
boolean b = mainWifi.enableNetwork(res, false);
Run Code Online (Sandbox Code Playgroud)
到
boolean b = mainWifi.enableNetwork(res, true);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7749 次 |
| 最近记录: |