Android wifi搜索/连接/断开连接

来源:互联网 发布:铝合金门窗效果图软件 编辑:程序博客网 时间:2024/05/01 06:44

今天做到Android手机的App去调用系统的wifi搜索和连接以及断开连接。

Wifi的搜索起始很简单,要用到系统的Service,使用

mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
获取到WifiManager以后,通过

mWifiManager.startScan();List<ScanResult> scanResults = mWifiManager.getScanResults();

获取到扫描的结果

获取到扫描结果后怎么连接呢,这里我参考了stackoverflow上的帖子

然后简单的封装了一下

<span style="white-space:pre"></span>public boolean connectToAP(ScanResult device, String passkey) {Log.i(TAG, "* connectToAP");WifiConfiguration wifiConfiguration = new WifiConfiguration();String networkSSID = device.SSID;String networkPass = passkey;Log.d(TAG, "# password " + networkPass);String securityMode = getScanResultSecurity(device.capabilities);if (securityMode.equalsIgnoreCase("OPEN")) {wifiConfiguration.SSID = "\"" + networkSSID + "\"";wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);int res = mWifiManager.addNetwork(wifiConfiguration);Log.d(TAG, "# add Network returned " + res);if(res == -1){return false;}if(!mWifiManager.enableNetwork(res, true)){return false;}mWifiManager.setWifiEnabled(true);} else if (securityMode.equalsIgnoreCase("WEP")) {wifiConfiguration.SSID = "\"" + networkSSID + "\"";wifiConfiguration.wepKeys[0] = "\"" + networkPass + "\"";wifiConfiguration.wepTxKeyIndex = 0;wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);int res = mWifiManager.addNetwork(wifiConfiguration);Log.d(TAG, "### 1 ### add Network returned " + res);if(res == -1){return false;}if(!mWifiManager.enableNetwork(res, true)){return false;}mWifiManager.setWifiEnabled(true);} else {wifiConfiguration.SSID = "\"" + networkSSID + "\"";wifiConfiguration.preSharedKey = "\"" + networkPass + "\"";wifiConfiguration.hiddenSSID = true;wifiConfiguration.status = WifiConfiguration.Status.ENABLED;wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.RSN);wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.WPA);int res = mWifiManager.addNetwork(wifiConfiguration);Log.d(TAG, "### 2 ### add Network returned " + res);if (res == -1) {return false;}mWifiManager.enableNetwork(res, true);boolean changeHappen = mWifiManager.saveConfiguration();if (res != -1 && changeHappen) {Log.d(TAG, "### Change happen");} else {Log.d(TAG, "*** Change NOT happen");}if (!mWifiManager.setWifiEnabled(true)) {return false;}}return true;}public String getScanResultSecurity(String capabilities) {Log.i(TAG, "* getScanResultSecurity");final String[] securityModes = { "WEP", "PSK", "EAP" };for (int i = securityModes.length - 1; i >= 0; i--) {if (capabilities.contains(securityModes[i])) {return securityModes[i];}}return "OPEN";}
简单的说就是要获取wifi的加密类型, 然后构建一个WifiConfiguration对象,然后设置相对应的属性SSID和密码等。
最后通过int res = mWifiManager.addNetwork(wifiConfiguration);将wifi网络加入连接。

连接了wifi以后,我们可以通过mWifiInfo = mWifiManager.getConnectionInfo();获取当前连接的对象,然后通过

int netId = wifi.getNetworkId();mWifiManager.disableNetwork(netId);mWifiManager.disconnect();mWifiInfo = null;
这几行代码断开wifi的连接


最后附上项目,由于有考虑到用到项目上,所以代码里有些东西会有封装

 

输入密码



0 0
原创粉丝点击