2017-02-07 5 views
9

IoTデバイスのAndroidアプリをプログラミングしています。私はデバイスにWiFiのユーザー名とパスワードを与えなければならないので、これを行うにはアンドロイドアプリを使用しています。私は次のコードを持っていますが、常にネットワークの天気に接続するか、正しいパスワードが与えられていないようです。AndroidテストWi-Fi接続をプログラム的に

これは私の電話機が接続されているのと同じAPでこれをテストしています。与えられた資格情報を使用して接続する>試み - - >元のネットワークに再接続

所望のアクションは、現在のAPから

切断です。

Wi-Fiネットワークとパスワードを正しく確認するにはどのような手順が必要ですか?

コード:あなたが利用できる無線LANネットワークをスキャンする必要はありませんかもしれ

WifiConfiguration conf = new WifiConfiguration(); 
    conf.SSID = "\"" + ssid + "\""; 
    for(ScanResult sr: wifiList){ 
     if(sr.SSID.equals(ssid)){ 
      if(sr.capabilities.contains("WEP")){ 
       if(isNumeric(pass)){ 
        conf.wepKeys[0] = pass ; 
       }else{ 
        conf.wepKeys[0] = "\"" + pass + "\""; 
       } 
       conf.wepTxKeyIndex = 0; 
       conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
       conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 
      }else if(sr.capabilities.contains("PSK")){ 
       conf.preSharedKey = "\""+ pass +"\""; 
      }else if(sr.capabilities.contains("EAP")){ 
       wifiName.setError("EAP networks not supported"); 
       //todo support EAP 
      }else{ 
       conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
      } 

      WifiManager wifiManager = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE); 
      wifiManager.addNetwork(conf); 

      List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); 
      for(WifiConfiguration i : list) { 
       if(i.equals(conf)) { 
        wifiManager.disconnect(); 
        if(!wifiManager.enableNetwork(i.networkId, true)){ 
         wifiPassword.setError("Incorrect Password"); 
         wifiManager.reconnect(); 
         return; 
        }else{ 
         wifiManager.reconnect(); 
         addUser(deviceSN, ssid, pass); 
        } 
       } 
      } 

      break; 
     } 
    } 
+0

のようなものですか? 私もこの問題に直面しています。私が間違ったパスワードを追加してもtrueを返します。あなたはこの問題を解決するためのアイディアを提案できますか? – AngelJanniee

答えて

0

、あなたは簡単に次のように行うことができます。NETWORK_STATE_CHANGED_ACTIONにあなたを登録する必要があります

public static void connectToWifi(Activity activity, String ssid, String password) { 
     WifiConfiguration wifiConfig = new WifiConfiguration(); 

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

     WifiManager wifiManager = (WifiManager) activity.getSystemService(WIFI_SERVICE); 
     wifiManager.setWifiEnabled(true); 
     int netId = wifiManager.addNetwork(wifiConfig); 
     wifiManager.disconnect(); 
     wifiManager.enableNetwork(netId, true); 
     wifiManager.reconnect(); 
    } 
+0

ネットワークへの接続が成功したか失敗したかはどうすれば分かりますか? – Reid

+0

wifiManager.reconnect();あなたが接続されているかどうかの結果ブール値..を返す 間違ったパスワードを追加して同じ値を返すと、 –

+0

が返されます。 – AngelJanniee

4

に従ってください。

これを使用すると、WI-FIネットワーク状態を取得でき、接続状態になったことを確認する必要があります。タイムアウト後にデバイスが接続されなかった場合は、接続が失敗したとみなすことができます。

もう1つの有用な受信機はSUPPLICANT_STATE_CHANGED_ACTIONです。

public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 

     if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) { 

      NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 

      switch (info.getState()) { 
       case CONNECTING: 
        break; 
       case CONNECTED: 
        break; 
       case DISCONNECTING: 
        break; 
       case DISCONNECTED: 
        break; 
       case SUSPENDED: 
        break; 
       } 
      } 
0

ちょうどチェック、それはあなたがこれを修正しましたこと

public static boolean isConnectingToInternet(Context context){ 
    try { 
     ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (connectivity != null) { 
      NetworkInfo info[] = connectivity.getAllNetworkInfo(); 
      if (info != null) { 
       for (int i = 0; i < info.length; i++) 

        if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
         return true; 
        } 

      } 
     } 
    }catch (Exception e){} 
    return false; 

} 
関連する問題