最快的Wifi接入点切换

时间:2011-08-17 19:20:38

标签: android audio wifi buffering

我正在开发一种音频通信应用程序,它要求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;
    }
}

1 个答案:

答案 0 :(得分:0)

也许你可以拥有一个扩展Observable(或实现一个自定义监听器)的对象,它定期检查(在一个线程中?)什么是最好的网络。当您检测到当前网络不再是最佳网络时,您只需通知观察者(或启动监听器)并实际启用/重新连接到新网络。

因此,检测什么是最好的网络将始终持续7到15秒,但由于在后台完成,从网络切换到另一个网络将几乎立即生效。