我正在开发一种音频通信应用程序,它要求Android手机快速从一个WiFi网络切换到另一个。目前,我的代码需要7到15秒的时间来切换已经知道存在于环境中并且已经预先配置的WiFi网络。可以加快这个时间来切换。我必须忍受缓冲15秒以上的音频,以便当用户从一个WiFi网络漫游到下一个WiFi网络时,他们不会听到任何暂停声音吗?
private void SwitchWifi(){
int myBestNetworkStrength = -60;
int myBestNetworkID = -1;
List<WifiConfiguration> currentConfig = myManager.getConfiguredNetworks();
if(myManager.startScan()){
if(myNetworks==null){
Initialize();
}
List<ScanResult> wifiList = myManager.getScanResults();
for(int i = 0; i < wifiList.size(); i++){
for(int j = 0; j < myNetworks.size(); j++){
if(wifiList.get(i).SSID.matches(myNetworks.get(j).mySSID)){
if(myBestNetworkStrength < wifiList.get(i).level){
for(int k = 0; k < currentConfig.size(); k++){
DebugScreen.AddLog("WIFIswitch", "k = " + currentConfig.get(k).SSID);
if(currentConfig.get(k).SSID.matches("\"" + wifiList.get(i).SSID+ "\"")){
myBestNetworkID = k;
myBestNetworkStrength = wifiList.get(i).level;
}
}
}
}
}
}
}//
DebugScreen.AddLog("WIFIswitch", "Best network strength is " + Integer.toString(myBestNetworkStrength) + " with network #" + Integer.toString(myBestNetworkID) );
if(myBestNetworkID != -1){
MailService.is_Waiting_For_New_Connection = true;
while(!MailService.has_Entered_Pause_Loop){
if(!isAlive())
return;
}
myManager.disconnect();
myManager.enableNetwork(myBestNetworkID, true);
myManager.reconnect();
MailService.is_Waiting_For_New_Connection = false;
}
}
答案 0 :(得分:0)
也许你可以拥有一个扩展Observable(或实现一个自定义监听器)的对象,它定期检查(在一个线程中?)什么是最好的网络。当您检测到当前网络不再是最佳网络时,您只需通知观察者(或启动监听器)并实际启用/重新连接到新网络。
因此,检测什么是最好的网络将始终持续7到15秒,但由于在后台完成,从网络切换到另一个网络将几乎立即生效。