/** * Configure a network, and connect to it. * * @param wifiMgr * @param scanResult * @param password Password for secure network or is ignored. * @return */ public boolean connectToNewNetwork( ScanResult scanResult, String password, int numOpenNetworksKept) { final String security = ConfigSec.getScanResultSecurity(scanResult); if (ConfigSec.isOpenNetwork(security)) { checkForExcessOpenNetworkAndSave(numOpenNetworksKept); } WifiConfiguration config = new WifiConfiguration(); config.SSID = convertToQuotedString(scanResult.SSID); config.BSSID = scanResult.BSSID; ConfigSec.setupSecurity(config, security, password); int id = -1; try { id = mWifiManager.addNetwork(config); } catch (NullPointerException e) { Log.e(TAG, "Weird!! Really!! What's wrong??", e); } if (id == -1) { return false; } if (!mWifiManager.saveConfiguration()) { return false; } config = getWifiConfiguration(config, security); if (config == null) { return false; } return connectToConfiguredNetwork(config, 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; }