2011-08-17 70 views
1

我正在開發一個音頻通信應用程序,它要求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

您應該捕獲返回值,而不是假設連接嘗試成功。 – Brian

回答

0

也許你可以有一個定期檢查擴展可觀察到(或實現自定義偵聽)的對象(在一個線程?)什麼是最好的網絡。當您檢測到當前的網絡不再是最好的時候,您只需通知觀察者(或啓動監聽器)並實際啓用/重新連接到新網絡。

因此,檢測什麼是最好的網絡總是會持續7到15秒,但由於它是在後臺完成的,因此從網絡切換到另一個網絡將幾乎立即生效。