以编程方式连接到 Wifi AP 时的密码验证

时间:2021-05-27 09:02:56

标签: java android

我正在我的 Android 应用程序中编写一个 wifi 连接页面。它扫描可用的 Wifi 网络,将其显示在 ListView 中,然后您单击要连接的网络。 如果密码正确,连接实际上有效,但我想通知用户连接失败(由于密码) 实际上我测试将 wifiManager.enableNetwork(netId, true); 结果放入布尔值中,但它总是返回 true 有关如何正确获取此信息的任何想法?

private void connectToNetwork(String networkSSID, String networkPass, String networkCapabilities, DialogInterface dialogInterface, WifiItem selectedWifi) {
        new AsyncTask<Void, Void, Boolean>() {

            @Override
            protected Boolean doInBackground(Void... voids) {

                WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
                WifiConfiguration wifiConfig = new WifiConfiguration();
                wifiConfig.SSID = String.format("\"%s\"", networkSSID);


                if (!wifiManager.isWifiEnabled()) {
                    wifiManager.setWifiEnabled(true);
                }

                if (networkCapabilities.toUpperCase().contains("WEP")) { // WEP Network.
                    wifiConfig.wepKeys[0] = String.format("\"%s\"", networkPass);
                    wifiConfig.wepTxKeyIndex = 0;
                    wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
                    wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);

                } else if (networkCapabilities.toUpperCase().contains("WPA")) { // WPA Network
                    wifiConfig.preSharedKey = String.format("\"%s\"", networkPass);

                } else { // OPEN Network.
                    wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
                }

                int netId = wifiManager.addNetwork(wifiConfig);
                wifiManager.disconnect();
                boolean isConnectOk = wifiManager.enableNetwork(netId, true);
                wifiManager.reconnect();
                return isConnectOk;
            }

            @Override
            protected void onPostExecute(Boolean connexion) {
                super.onPostExecute(connexion);

                if (connexion) {
                    Toast.makeText(WifiActivity.this, (String.format(getResources().getString(R.string.connected_to_network),  selectedWifi.getSSID())), Toast.LENGTH_LONG).show();
                    dialogInterface.dismiss();
                } else {
                    Toast.makeText(WifiActivity.this, (R.string.wifi_incorrect_password), Toast.LENGTH_LONG).show();
                }

            }
        }.execute();
    } ```

0 个答案:

没有答案
相关问题