2011-03-10 4 views
5

이것은 나를 죽이고 도움이 될 것입니다.Android wifimanager가 항상 true를 반환합니다.

wifi 관리자를 사용하여 개방형 네트워크에 연결하고 싶습니다. 내가 가지고있는 문제는 코드가 모든 네트워크에 연결을 요구한다는 것입니다. 아래는 네트워크의 SSID로 실행되고 호출되는 전체 코드입니다. 네트워크의 SSID로 어떤 문자열을 전달해도 문제가되지 않습니다. 어떤 형태 나 형태의 네트워크도 존재하지 않더라도 enableNetwork 주장은 true를 반환합니다. 이는 네트워크에 연결된 것을 의미합니다.

내가해야할 일은 내가 연결되어 있는지 확인하는 것입니다. 따라서 존재하지 않는 네트워크 SSID를 전달하면 (예 : 범위를 벗어남) API는 연결을 시도 할 때 오류를 반환해야합니다.

모든 아이디어/힌트/제안 사항을 크게 높이세요.

public boolean conto (String network){ 

    WifiConfiguration wifiConfiguration = new WifiConfiguration(); 
    wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
    List<WifiConfiguration> configs = null; 
    int inetId = -1; 


    // make sure there are no funny stuff in the config 
    configs = wifi.getConfiguredNetworks(); 
    for (WifiConfiguration config : configs) { 
     wifi.removeNetwork(config.networkId); 
     Log.d("********", "Removed Network: SSID=[" + config.SSID + "] and ID=[" + config.networkId + "]"); 

    } 

    // Now add the network 
    wifiConfiguration.SSID = "\"" + network + "\""; 
    wifiConfiguration.hiddenSSID = false; 
    //wifiConfiguration.priority = 1; 
    //wifiConfiguration.networkId = 999; 

    inetId = wifi.addNetwork(wifiConfiguration); 
    if(inetId < 0) { 
      Log.d("********", "Could Not Add Network......... [" + wifiConfiguration.SSID + "]"); 

     } 
     else { 

      Log.d("********", "Added Network......... [" + wifiConfiguration.SSID + "]"); 

      // Lets be paranoid and double check the config file 
      Log.d("********", " +++++++++++++++++++++++++ This is what I have in Config File"); 
      configs = wifi.getConfiguredNetworks(); 
      for (WifiConfiguration config : configs) { 
       Log.d("********", "In the Config file after add, SSID=[" + config.SSID + "], ID=[" + config.networkId + "]"); 

      } 

      // Now Enable the network 
      boolean successConnected = wifi.enableNetwork(inetId, true); 
      //boolean successAssociated = wifi.reassociate(); This did not change the results 

      if(successConnected) { 
       Log.d("********", "Connected to......... [" + inetId + "]"); 
      } 
      else { 

       Log.d("********", "Could Not Connect to......... [" + inetId + "]"); 

      } 


     } 
     return false; 
    } 
+0

해결 했습니까? 나는 [같은 문제가] (http://stackoverflow.com/questions/11378452/android-wifimanager-making-a-phantom-connection)하고있다. – gcl1

답변

9

나는이 문제가 귀하의 코드가 WiFi 네트워크에 연결하는 것이 동기식 프로세스라는 가정에 근거한다고 생각합니다. 메서드가 enableNetwork() 인 경우 연결이 발생하는 동안 차단하지 않고 연결 성공 또는 실패를 반환하면 즉시 반환되며 결과는 요청이 제대로 WiFi 서비스와 요청자에 도달했는지 여부입니다. 당신은 장치의 연결 상태와 무슨 일이 일어나고 있는지에 대한 가시성을 원하는 경우에

, 당신은 BroadcastReceiverWifiManager. SUPPLICANT_STATE_CHANGED_ACTIONWifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION 방송 의도 작업을 모니터링 할 필요가있다. 연결 프로세스를 시작하면 이러한 콜백은 상황이 어떻게 진행되는지 알려줍니다. 예를 들어, 존재하지 않는 네트워크를 통과하는 경우 연결 상태가 즉시 즉시 연결 해제되어야합니다. 유효한 네트워크는 연결, 인증 및 연결 프로세스를 거치게됩니다. 이러한 모든 단계는 이러한 브로드 캐스트를 통해 열거됩니다.