2011-08-17 2 views
1

Je développe une application de communication audio qui nécessite qu'un téléphone Android passe rapidement d'un réseau WiFi à un autre. Actuellement, mon code prend de 7 à 15 secondes pour basculer les réseaux WiFi qu'il sait déjà exister dans l'environnement et qui sont préconfigurés. Est-il possible d'accélérer cette fois pour passer? Dois-je vivre avec un tampon de 15 secondes et plus d'audio de sorte que lorsque l'utilisateur passe d'un réseau WiFi à l'autre, il n'entend pas de pause?Changement de point d'accès Wifi le plus rapide possible

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

Vous devez capturer la valeur renvoyée et ne pas supposer que la tentative de connexion a réussi. – Brian

Répondre

0

Peut-être que vous pourriez avoir un objet qui étend Observable (ou met en œuvre un écouteur personnalisé) qui vérifie régulièrement (dans un thread?) Quel est le meilleur réseau. Lorsque vous constatez que le réseau actuel n'est plus le meilleur, vous avertissez simplement les observateurs (ou lancez l'auditeur) et activez/reconnectez réellement le nouveau réseau.

Donc, la détection du meilleur réseau durera toujours de 7 à 15 secondes, mais comme cela se passe en arrière-plan, le passage d'un réseau à un autre sera presque immédiatement efficace.

Questions connexes