2016-10-05 6 views
1

사용할 수있는 Wi-Fi를 모두 확인한 다음 현재 연결되어있는 다른 WiFi에 연결해야합니다.Android 스위치 AP 프로그래밍 방식으로

샘플 - 장치는 내가 아닌 ScanResult를 사용할 때하지 않는 것을 i.networkId 이 작업을하기 때문에

private void switchAP(String ssid, String pass)) { WifiConfiguration conf = new WifiConfiguration(); conf.SSID = "\"" + ssid + "\""; if(!TextUtils.isEmpty(pass)) conf.wepKeys[0] = "\"" + pass + "\""; conf.preSharedKey = "\"" + pass + "\""; conf.wepTxKeyIndex = 0; conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); WifiManager wifiManager = (WifiManager) SyncActivity.this.getSystemService(Context.WIFI_SERVICE); wifiManager.addNetwork(conf); // List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); List<ScanResult> list = wifiManager.getScanResults(); for (ScanResult i : list) { Log.w(TAG, "WIFI LIST > " + i.SSID); if (i.SSID != null && i.SSID.equals(ssid)) { wifiManager.disconnect(); wifiManager.enableNetwork(i.networkId, true); //>i.networkId Does not work - only in List<WifiConfiguration>… wifiManager.reconnect(); logMsg("WiFi connection switched to " + ssid); break; } } } 

가 그럼 난

switchAP("AP02", "")); 

내가 연결할 수 없습니다 전화

AP01에 연결입니다 Wi-Fi 구성.

누군가이 문제가 발견 되었습니까? 감사합니다.

List를 사용하지 않는 이유는이 SSOD에 장치가 연결되지 않았기 때문입니다. 및 목록은 네트워크에 연결된 모든 미리보기 만 반환합니다.

답변

0

WifiConfiguration.Status.ENABLED을 사용해야합니다.

예제 코드가 당신을 위해 아래에 기록됩니다

public void WIFI_CONNECT_WIFI (String ssid, String password) 
{ 
    WifiManager wifi_manager = (WifiManager)getSystemService(Context.WIFI_SERVICE); 

    WifiConfiguration wifi_configuration = new WifiConfiguration(); 
    wifi_configuration.SSID    = String.format("\"%s\"", ssid); 
    wifi_configuration.preSharedKey  = String.format("\"%s\"", password); 


    if (WIFI_NETWORK_EXIST (wifi_configuration) == true) { 
     wifi_configuration.status = WifiConfiguration.Status.ENABLED; 
     wifi_configuration.priority = 40; 
    } 
    else { 
     boolean result = wifi_manager.getConfiguredNetworks().add(wifi_configuration); 
     if (result == false) { 
      return; 
     } 
     wifi_configuration.status = WifiConfiguration.Status.ENABLED; 
     wifi_configuration.priority = 40; 
     wifi_configuration.networkId = wifi_manager.addNetwork(wifi_configuration); 
    } 

    wifi_manager.enableNetwork(wifi_configuration.networkId, true); 
    wifi_manager.saveConfiguration(); 
} 

- SSID는 null를 얻을 수있는 가능성이 있다면

public boolean WIFI_NETWORK_EXIST (WifiConfiguration wifi_configuration) 
{ 
    WifiManager wifi_manager = (WifiManager)getSystemService(Context.WIFI_SERVICE); 

    for (WifiConfiguration config : wifi_manager.getConfiguredNetworks()) { 

     if (wifi_configuration.SSID.equals(config.SSID)) { 
      wifi_configuration.networkId = config.networkId; 
      return true; 
     } 
    } 
    return false; 
} 

그리고 방법에 의해을, 당신은에 항상 거 충돌은 당신의 경우 null 값의 멤버 함수를 사용하려고 시도하기 때문에 SSID가 null 값과 함께 제공되는 경우 비교.

if (i.SSID != null && i.SSID.equals(ssid)) { 
    // ... 
} 

예상 스택 추적은 다음과 같습니다. "즐 즐 즐 null 값에을 String.equals (String)를 사용하려고 시도"

equals (...) 비교에 대해 Null 비교 후 내부 또는 다른 if를 수행해야합니다.