Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中以编程方式连接wpa2企业wifi连接_Android_Android Wifi_Wifimanager_Wifi - Fatal编程技术网

在android中以编程方式连接wpa2企业wifi连接

在android中以编程方式连接wpa2企业wifi连接,android,android-wifi,wifimanager,wifi,Android,Android Wifi,Wifimanager,Wifi,我只是在android中尝试了一些wpa2企业连接的代码,但是没有任何连接。我想要一个正确的代码来连接正确的网络。现在我已经使用了这个,但我需要澄清一下,因为这是一个非常旧的。这里我附上一些关于连接澄清的截图。 在这里您可以看到标识和密码 WifiConfiguration wifiConfiguration = new WifiConfiguration(); wifiConfiguration.SSID = "\"" + networkSSID + "\"";

我只是在android中尝试了一些wpa2企业连接的代码,但是没有任何连接。我想要一个正确的代码来连接正确的网络。现在我已经使用了这个,但我需要澄清一下,因为这是一个非常旧的。这里我附上一些关于连接澄清的截图。 在这里您可以看到标识密码

  WifiConfiguration wifiConfiguration = new WifiConfiguration();
        wifiConfiguration.SSID = "\"" + networkSSID + "\"";
        wifiConfiguration.BSSID = Bssid;
        wifiConfiguration.hiddenSSID = true;
        wifiConfiguration.status = WifiConfiguration.Status.DISABLED;
        wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
        wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X);
        wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
        wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
        wifiConfiguration.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
        wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
        wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
        wifiConfiguration.enterpriseConfig.setIdentity(identity);
        wifiConfiguration.enterpriseConfig.setPassword(password);

        wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
        wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);

       if (networkPasskey.matches("^[0-9a-fA-F]+$")) {
            wifiConfiguration.wepKeys[0] = networkPasskey;
        } else {
            wifiConfiguration.wepKeys[0] = "\"".concat(networkPasskey).concat("\"");
        }
        wifiConfiguration.wepTxKeyIndex = 0;
我在wificonfiguration中找到了enterprise函数来设置身份和密码

    wifiConfiguration.enterpriseConfig.setIdentity(identity);
    wifiConfiguration.enterpriseConfig.setPassword(password);
但是这个有什么用呢。当我们有身份和密码

if (networkPasskey.matches("^[0-9a-fA-F]+$")) {
        wifiConfiguration.wepKeys[0] = networkPasskey;
    } else {
        wifiConfiguration.wepKeys[0] = "\"".concat(networkPasskey).concat("\"");
    }
    wifiConfiguration.wepTxKeyIndex = 0;

我使用的是BSSID,因为我的AP有相同的ssid,所以我想通过使用BSSID连接正确的网络

我已经通过这个解决了这个问题

但这种方法将一直持续到android 8.0中的android 7.0。他们限制了许多功能,我们无法手动添加wifi配置

当您试图配置wpa2 enterprise时,我们必须知道三件事

  • 您必须了解EAP方法,它可以是任何方法,但大多数情况下他们将使用PEAP
  • 2.您必须了解阶段2方法,大多数情况下他们会使用MSCHAPV2

  • 证书这一个最大值不验证
  •   WifiConfiguration config = new WifiConfiguration();
        config.SSID = "\"" + networkSSID + "\"";
        config.BSSID = Bssid;
        config.priority = 1;
     String networkIdentity = "";
             networkPasskey = "";
            config.status = WifiConfiguration.Status.ENABLED;
            WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig();
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X);
            enterpriseConfig.setIdentity(networkIdentity);
            enterpriseConfig.setPassword(networkPasskey);
            enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.PEAP);
            enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.MSCHAPV2);
            config.enterpriseConfig = enterpriseConfig;
       WifiManager myWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        int id = myWifiManager.addNetwork(config);
        Log.d("addNetwork", "# addNetwork returned " + id);
    
        myWifiManager.enableNetwork(id, true);