2016-10-05 3 views
1

Мне нужно проверить все доступные Wi-Fi, а затем подключиться к другому, к которому я подключаюсь.Android-коммутатор AP программно

Sample - устройство подключения к AP01

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", "")); 

я не могу подключиться, потому что это i.networkId, кажется, не работает, когда я использую ScanResult, а не WifiConfiguration.

Кто-нибудь натолкнулся на это? Спасибо, ребята.

Причина, по которой я не пользуюсь List, заключается в том, что устройство никогда не подключалось к этому SSOD раньше. и List возвращает только все подключенные к просмотру сети.

ответ

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(); 
} 

-

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; 
} 

И кстати, если есть возможность получить SSID Null, вы всегда собираешься аварии на ваш, если сравнение, когда SSID имеет значение null, поскольку вы пытаетесь использовать функцию-член нулевого значения.

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

ожидается трассировки стека является: "бла-бла-бла пытаются использовать String.equals (String) на нулевое значение"

Вы должны сделать внутреннее или другое, если после нулевого сравнения для сравнения равных (...).

Смежные вопросы