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
- Android wifi搜索/连接/断开连接
- android wifi连接与断开
- win10 wifi断开连接
- Android wifi搜索与连接
- 连接指定wifi,断开wifi解决方案
- Android 解决黑屏时wifi断开连接的问题
- android连接指定wifi,程序断开wifi并保证系统不自动重新连接,记录wifi连接时间
- Android 搜索附近wifi并连接
- 关于wifi连接与断开的监测
- android 代码怎么实时监控连接当前wifi热点的设备的连接或断开事件?
- Android studio Github 断开连接
- android 获取蓝牙连接断开连接事件
- C#WIFI搜索与连接
- Android开发心得-系统休眠时WIFI连接断开的解决办法
- Andorid编程心得-利用代码解决Android WIFI休眠后连接断开的问题
- Android wifi 从连接态自动断开的解决办法(dhcp导致)
- android wifi 连接笔记
- android Wifi自动连接
- Android的setTag
- 嵌入式 学习 整理
- mysql 字符集
- SQL解析器的性能测试
- IOS内存管理
- Android wifi搜索/连接/断开连接
- CMake使用介绍
- Linux互斥与同步应用(四):posix信号量的互斥与同步
- Java设计模式-单例模式
- NET_SKBUFF_DATA_USES_OFFSET分析
- SVN客户端常用命令使用方法专家指导
- SUSAN算子——边缘检测
- 精易模块中普通填表初始化失败的解决方案
- Python模块学习——pythoncom模块