Программно подключаясь к сети 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.
Пожалуйста, предложите решение обойтись без перезагрузки устройства.