Быстрое переключение точек доступа Wifi - PullRequest
1 голос
/ 17 августа 2011

Я разрабатываю приложение для аудиосвязи, которое требует, чтобы телефон Android быстро переключался с одной сети WiFi на другую. В настоящее время мой код занимает от 7 до 15 секунд, переключая сети WiFi, которые, как он уже знает, существуют в среде и предварительно настроены. Можно ли ускорить это время для переключения. Должен ли я жить с буферизацией 15+ секунд аудио, чтобы при перемещении пользователя из одной сети 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 голосов
/ 18 августа 2011

Может быть, у вас может быть объект, расширяющий Observable (или реализующий пользовательский слушатель), который регулярно проверяет (в потоке?), Какая сеть лучше. Когда вы обнаруживаете, что текущая сеть больше не является лучшей, вы просто уведомляете наблюдателей (или запускаете слушателя) и фактически включаете / повторно подключаетесь к новой сети.

Таким образом, определение лучшей сети всегда будет длиться от 7 до 15 секунд, но, как это делается в фоновом режиме, переключение с одной сети на другую будет практически мгновенно эффективным.

...