android6.0 切换到指定wifi
Posted 彼岸花you
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android6.0 切换到指定wifi相关的知识,希望对你有一定的参考价值。
遇到的问题:
1、在网上找到一个wifi工具类,写了初步的切换到指定wifi的demo,测试后,一切ok。换到指定设备的wifi,失败了,点击连接,app无响应了。
2、wifi切换太慢了,同事觉得不稳定,继续改。根据设备的wifi加密模式,修改了创建wifi的方式,测试之后基本上都能连上,偶尔不能切换成功
3、最近一个偶然的机会又来测试wifi。额…..失败了,并且一直切换不过去,简直不是一般的难受。
官方文档才是正理
上述切换失败的原因
android6.0 只允许操作自己创建的WifiConfiguration。
上面遇到的问题在于自己对“个人创建创建WifiConfiguration” 理解不到位。以及对wifi加密模式的不清楚,我们的设备是wpa2的加密模式,直接使用了wpa2的加密模式,切换速度比以前更快了,而且成功率也高了很多。
wifi的种类
wifi有两种,一种是自己在代码里面创建,一种是别人的.
别人的wifi:主要包括由用户手动输入密码连接的wifi和其他app创建的wifi—这里简称为系统wifi
自己的wifi:自己在app里面创建的wifi—-这里简称为个人wifi
连接成功了 则表示创建wifi成功了。
对wifi的操作
系统wifi:虽然可以通过wifiManager的savedConfiguration方法获取到指定wifi对应的Configuration,但是并不能进行具体的操作,add该wifi,会直接返回-1(addNetwork(WifiConfigurationconfig)=-1),enableNetwork(config)时会导致app无响应,removeNetwork(config)=false,移除系统wifi也不会成功。详见下列的测试过程。
个人wifi:可以进行add、enable、remove操作,详见下列的测试过程 。
测试过程
WifiConfiguration wifiNewConfiguration = createWifiInfo(aimWifiName, aimWifiPwd);//使用wpa2的wifi加密方式
int newNetworkId = wifiManager.addNetwork(wifiNewConfiguration);
Log.e("MainActivity", "newNetworkId:" + newNetworkId);
/**
* addNetwork打印结果:
* 1、未保存密码 ==32
* 2、在代码里面保存了密码 ==32--意思是在代码里面add了 没有remove的情况
* 3、手动连接了密码 ==-1
*/
boolean enableNetwork = wifiManager.enableNetwork(newNetworkId, true);//newNetworId在操作系统wifi的时候,可以换成通过saveConfiguration中WifiConfiguration 获取到networkId来继续进行测试,这里就忽略啦
Log.e("MainActivity", "enableNetwork:" + enableNetwork);
/**
* enableNetwork打印结果:
* 1、未保存密码 切换成功
* 2、在代码里面保存了密码 切换成功
* 3、手动连接了密码 app无响应了
*/
解决方案
android6.0 运行时环境在demo里面。
//最终解决方案
WifiConfiguration wifiNewConfiguration = createWifiInfo(aimWifiName, aimWifiPwd);//使用wpa2的wifi加密方式
int newNetworkId = mWifiManager.addNetwork(wifiNewConfiguration);
if (newNetworkId == -1)
Log.e("MainActivity", "操作失败,需要您到手机wifi列表中取消对设备连接的保存");
else
boolean enableNetwork = mWifiManager.enableNetwork(newNetworkId, true);
if (!enableNetwork)
Log.e("MainActivity", "切换到指定wifi失败");
else
Log.e("MainActivity", "切换到指定wifi成功");
demo地址
https://github.com/WhatWeCan/WifiDemo
以上是关于android6.0 切换到指定wifi的主要内容,如果未能解决你的问题,请参考以下文章