Программно подключаясь к сети Wifi, не могу подключиться без перезагрузки устройства

Я пытаюсь подключить сеть Wi-Fi программно в Android.

это мой метод подключения

public static boolean connect(WifiManager wifi, byte security, String ssid, String pass) {
    if (security == AccessPointUtil.SECURITY_EAP) {
        warn(TAG, "connect !EAP %d %s, %s", security, ssid, pass);
        return false;
    }

    ssid = "\"" + ssid + "\"";
    pass = "\"" + pass + "\"";
    WifiConfiguration config = null;
    List<WifiConfiguration> networks = wifi.getConfiguredNetworks();
    int size = networks == null ? 0 : networks.size();
    for (int i = 0; i < size; i++) {
        if (networks.get(i).SSID.equals(ssid)) {
            config = networks.get(i);
            info(TAG, "connect EXIST %d", config.networkId);
            break;
        }
    }

    WifiInfo info = null;
    if (config == null) {
        config = new WifiConfiguration();
        config.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
        config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
        config.SSID = ssid;
    } else if (null != (info = wifi.getConnectionInfo())
            && info.getNetworkId() == config.networkId) {
        wifi.disableNetwork(info.getNetworkId());
    }

    if (security == AccessPointUtil.SECURITY_WEP) {
        config.wepKeys[0] = pass;
        config.wepTxKeyIndex = 0;
        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);

    } else if (security == SECURITY_PSK) {
        config.preSharedKey = pass;
        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
        config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
        config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
        config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);

    } else {
        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
    }

    int networkId = wifi.addNetwork(config);
    boolean enabled = false;
    try {

        if (0 > networkId) {
            networkId = info == null ? networkId : info.getNetworkId();
            warn(TAG, "connect %d !add %d %s %s", networkId, security, ssid, pass);
        }

        enabled = wifi.enableNetwork(networkId, true);
        final boolean saved = wifi.saveConfiguration();
        debug(TAG, "connect %d enabled:%b saved:%b", networkId, enabled, saved);
        return enabled;
    } catch (Exception e) {
        e.getStackTrace();
        return false;
    }
}

тогда я назвал это так

if (!LocalRepository.isConnectionNetwork()) {

            if (!LocalRepository.getInstance().isWifiStatus()) {

                boolean isConnected =  WifiUtil.connect(wifi, security, wifi_ssid, wifi_pwd);

                try {
                    Thread.sleep(8000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                Log.d("isNetworkAvailable ", LocalRepository.isConnectionNetwork() + " On time");

                }

                }

тогда ответ после выполнения этого метода connect() всегда ложен для этого LocalRepository.isConnectionNetwork()

Но после перезагрузки только возвращает true.

Пожалуйста, предложите решение обойтись без перезагрузки устройства.

0 ответов

Другие вопросы по тегам