public WifiConfiguration getWifiConfiguration(WifiConfiguration configToFind, String security) { final String ssid = configToFind.SSID; if (ssid.length() == 0) { return null; } final String bssid = configToFind.BSSID; if (security == null) { security = ConfigSec.getWifiConfigurationSecurity(configToFind); } final List<WifiConfiguration> configurations = mWifiManager.getConfiguredNetworks(); for (final WifiConfiguration config : configurations) { if (config.SSID == null || !ssid.equals(config.SSID)) { continue; } if (config.BSSID == null || bssid == null || bssid.equals(config.BSSID)) { final String configSecurity = ConfigSec.getWifiConfigurationSecurity(config); if (security.equals(configSecurity)) { return config; } } } return null; }
public WifiConfiguration getWifiConfiguration(final ScanResult hotsopt, String hotspotSecurity) { final String ssid = convertToQuotedString(hotsopt.SSID); if (ssid.length() == 0) { return null; } final String bssid = hotsopt.BSSID; if (bssid == null) { return null; } if (hotspotSecurity == null) { hotspotSecurity = ConfigSec.getScanResultSecurity(hotsopt); } final List<WifiConfiguration> configurations = mWifiManager.getConfiguredNetworks(); if (configurations == null) { return null; } for (final WifiConfiguration config : configurations) { if (config.SSID == null || !ssid.equals(config.SSID)) { continue; } if (config.BSSID == null || bssid.equals(config.BSSID)) { final String configSecurity = ConfigSec.getWifiConfigurationSecurity(config); if (hotspotSecurity.equals(configSecurity)) { return config; } } } return null; }
/** * Change the password of an existing configured network and connect to it * * @param wifiMgr * @param config * @param newPassword * @return */ public boolean changePasswordAndConnect( WifiConfiguration config, String newPassword, int numOpenNetworksKept) { ConfigSec.setupSecurity(config, ConfigSec.getWifiConfigurationSecurity(config), newPassword); final int networkId = mWifiManager.updateNetwork(config); if (networkId == -1) { // Update failed. return false; } // Force the change to apply. mWifiManager.disconnect(); return connectToConfiguredNetwork(config, true); }
/** * Connect to a configured network. * * @param wifiManager * @param config * @param numOpenNetworksKept Settings.Secure.WIFI_NUM_OPEN_NETWORKS_KEPT * @return */ public boolean connectToConfiguredNetwork(WifiConfiguration config, boolean reassociate) { final String security = ConfigSec.getWifiConfigurationSecurity(config); int oldPri = config.priority; // Make it the highest priority. int newPri = getMaxPriority() + 1; if (newPri > MAX_PRIORITY) { newPri = shiftPriorityAndSave(); config = getWifiConfiguration(config, security); if (config == null) { return false; } } // Set highest priority to this configured network config.priority = newPri; int networkId = mWifiManager.updateNetwork(config); if (networkId == -1) { return false; } // Do not disable others if (!mWifiManager.enableNetwork(networkId, false)) { config.priority = oldPri; return false; } if (!mWifiManager.saveConfiguration()) { config.priority = oldPri; return false; } // We have to retrieve the WifiConfiguration after save. config = getWifiConfiguration(config, security); if (config == null) { return false; } // ReenableAllApsWhenNetworkStateChanged.schedule(mContext); // Disable others, but do not save. // Just to force the WifiManager to connect to it. if (!mWifiManager.enableNetwork(config.networkId, true)) { return false; } final boolean connect = reassociate ? mWifiManager.reassociate() : mWifiManager.reconnect(); if (!connect) { return false; } return true; }
/** * Ensure no more than numOpenNetworksKept open networks in configuration list. * * @param wifiMgr * @param numOpenNetworksKept * @return Operation succeed or not. */ private boolean checkForExcessOpenNetworkAndSave(int numOpenNetworksKept) { final List<WifiConfiguration> configurations = mWifiManager.getConfiguredNetworks(); sortByPriority(configurations); boolean modified = false; int tempCount = 0; for (int i = configurations.size() - 1; i >= 0; i--) { final WifiConfiguration config = configurations.get(i); if (ConfigSec.isOpenNetwork(ConfigSec.getWifiConfigurationSecurity(config))) { tempCount++; if (tempCount >= numOpenNetworksKept) { modified = true; mWifiManager.removeNetwork(config.networkId); } } } if (modified) { return mWifiManager.saveConfiguration(); } return true; }