您的位置:首页 > 移动开发 > Android开发

自定义获取WI-FI列表及相关设置

2017-06-22 23:55 204 查看
辗转反则好长时间,转眼间自己从事android行业已经有三年了,却什么都没留下来,在这行业中奋斗,过着一个人的生活。。。。

好了,废话不多说了,上干货。

Wi-Fi在android 中是不可切分的一部分,并且是生活中不可切分的部分,一般情况下,在应用开发的时候会很少用到相关的东西,因为没有人愿意打开你的应用去设置网络连接,都是通过系统设置连接Wi-Fi,进入我们的应用,但是在某些应用中不乏缺少使用Wi-Fi的基本使用的

Wi-Fi相关的基本信息不做多讲,直接说几个常用的

1、获取Wi-Fi列表

在获取Wi-Fi列表的时候得获取Wi-Fi管理类Wif iManager 

wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);

接着判断Wi-Fi是否打开

if (!wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(true);
}

但是不得不说的是,在android6.0的时候Google工程师可能在开发的时候感觉Wi-Fi的打开或许会用到定位,所以度源码发现,要获取到Wi-Fi列表,必须打开Wi-Fi和GPS定位,缺一不可,

wifiManager.startScan();//开始扫描

可以通过getScanResults()方法获取到Wi-Fi列表 此方法的返回值是一个List集合,对象是ScanResults,这个对象中包含了Wi-Fi的一些基本信息,比如SSID Wi-Fi当前选择的名称,capableitiesWi-Fi的验证方式等,具体需要的信息可以查看ScanResults源码。

list = wifiManager.getScanResults();


2、当然我们获取到Wi-Fi列表的时候肯定需要对列表进行操作,比如当点击需要连接的Wi-Fi条目时,进行输入密码进行链接,并且不需要root手机,但是在这个过程中我们需要一个类帮助我们完成链接WifiConfiguration,这个类时对Wi-Fi的配置类,在这个类中将设置将要链接的Wi-Fi的信息

WifiConfiguration wc = new WifiConfiguration();
wc.SSID = "\"" + ssid + "\""; Wi-Fi名称
wc.preSharedKey = "\"" + mWifiPwd.getText().toString().trim() + "\""; //密码
wc.status = WifiConfiguration.Status.ENABLED;//....其他配置
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);

当我们配置完成后,将配置信息传递

int NetId = mWifiManager.addNetwork(config);
return mWifiManager.enableNetwork(NetId, true);

根据返回fan值可以判断Wi-Fi是否连接成功,但是上边return的返回值,不能完美的解释是否登录成功,因为他的内部实现的是一个耗时操作,有可能在密码正确的情况下返回false,那用什么来判断连接是否成功呢?答案是广播,监听Wi-Fi是否连接成功的广播,广播的action是
android.bluetooth.adapter.action.SCAN_MODE_CHANGED


接收到广播后Wi-Fi连接成功!!!在开发的过程中学习过其他人的博客,如果有相同或相似的地方,还请多多包含,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  wi-fi android
相关文章推荐