感慨
最近学习安卓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)-->
打开、关闭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)
以上代码是网上的代码结合我的学习情况修改
|