Android:WiFi连接之一

感慨

最近学习安卓WiFi连接,真是一言难尽啊。WiFi连接这部分的资料网上并不多,于是只能官方文档+一直找资料学。即便如此,也是让我自闭了,一堆API弃了,网上找的有的已经不适用了。。。总之就是问题多多,所以还是自己总结一下笔记吧,加深理解,也防止后面自己用到又要四处去找资料。

WIFI连接的相关权限

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission><!--    改变网络状态-->
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission><!--    改变WIFI状态-->
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><!--    获取网络信息状态-->
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission><!--    获取WIFI信息状态-->
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><!--    允许一个程序访问精良位置(如GPS)-->

android.permission.ACCESS_FINE_LOCATION这个权限主要getConnectionInfo()这个方法需要,这个方法是用于获取处于活跃状态的WiFi信息,包括已经连接和连接中两种状态。(此外获取wifi列表的的方法中也需要,这里只介绍getConnectionInfo())

这个权限要手动打开,且不会提示,除非你实现了动态获取权限。除了手动设置权限外,还要打开GPS

打开、关闭WIFI

WiFi的打开和关闭用的 WifiManager 类中的setWifiEnabled方法实现。

打开WiFi:

//首先,创建WifiManager对象
Context context = getApplicationContext();
WifiManager wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

//判断WiFi是否打开,没有则打开WiFi,res为真则成功打开了
if (!wifiManager.isWifiEnabled()) {
    boolean res = wifiManager.setWifiEnabled(true);
}

关闭WiFi:

//首先,创建WifiManager对象
Context context = getApplicationContext();
WifiManager wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

//判断WiFi是否打开,打开了则关闭WiFi,res为真则成功关闭了
if (wifiManager.isWifiEnabled()) {
    boolean res = wifiManager.setWifiEnabled(true);
}

API29以后 ,这个方法已经被弃用了,没有效果,res 会一直为 false-——其实很多WiFi相关的方法都弃了。一开始我还以为有什么代替的方法,结果查了很久发现,在面向安卓8以后的平台中已经不允许app打开和关闭WiFi,所以是没有新方法的。如果要用,只能这样:
在相应的gradle下把这些改成29以前的
在这里插入图片描述
我是把三个都改了,可能只改一些就行,不过我没试了。

WiFi连接

输入WiFi名称、密码实现连接

// 首先配置一个WifiConfiguration对象
String SSID = "Rair"; 		 //输入WIFI名称
String Password = "88888888";		//输入WIFI密码
//WIFI安全性
WifiCipherType Type = Password.equals("")? WifiConnector.WifiCipherType.WIFICIPHER_NOPASS: WifiConnector.WifiCipherType.WIFICIPHER_WPA
WifiConfiguration config = new WifiConfiguration();
//公认的IEEE 802.11验证算法。
config.allowedAuthAlgorithms.clear();
//公认的的公共组密码。
config.allowedGroupCiphers.clear();
//公认的密钥管理方案。
config.allowedKeyManagement.clear();
//密码为WPA。
config.allowedPairwiseCiphers.clear();
//公认的安全协议。
config.allowedProtocols.clear();
//设置WiFi名称
config.SSID = "\"" + SSID + "\"";
// 开放
if (Type == WifiCipherType.WIFICIPHER_NOPASS) {
    config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
}
// wpa
if (Type == WifiCipherType.WIFICIPHER_WPA) {
	//设置密码
    config.preSharedKey = "\"" + Password + "\""; 	
    //不广播其SSID的网络
    config.hiddenSSID = true;
    config.allowedAuthAlgorithms
            .set(WifiConfiguration.AuthAlgorithm.OPEN);
    config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
    config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
    config.allowedPairwiseCiphers
            .set(WifiConfiguration.PairwiseCipher.TKIP);
    // 此处需要修改否则不能自动重联
    // config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
    config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
    config.allowedPairwiseCiphers
            .set(WifiConfiguration.PairwiseCipher.CCMP);
    config.status = WifiConfiguration.Status.ENABLED;
}
//添加网络
int netID = wifiManager.addNetwork(wifiConfig);
//连接WIFI
boolean enabled = wifiManager.enableNetwork(netID, true);

断开WIFI连接

断开WiFi连接有两种方法

//暂时断开,可以重连
wifiManager.disconnect()
//断开,不可以重连,忘记密码
wifiManager.disableNetwork(netID)

以上代码是网上的代码结合我的学习情况修改

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三人行v

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值