2016-10-05 10 views
1

利用可能なWi-Fiをすべて確認し、現在接続している別のWi-Fiに接続する必要があります。AndroidスイッチAPプログラムで

サンプル - デバイスは、その後、私はこのは私ではなくScanResultを使用する場合が動作していないようi.networkIdので、私は接続できない

switchAP("AP02", "")); 

を呼び出す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; 
      } 

     } 
    } 

に接続していますWifiConfiguration。

誰かがこれを見つけましたか? ありがとうございます。

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

-

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のヌルを取得する可能性があります場合は、あなたの場合には、常につもりクラッシュしていますヌル値のメンバ関数を使用しようとしているので、SSIDにnull値が含まれている場合と比較してください。

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

期待スタックトレースは次のとおりです。 "かくかくしかじかNULL値にString.equals(String)をを使用しようとしています。"

equals(...)比較の場合は、nullの後の比較を行う必要があります。

関連する問題