文档章节

android自动连接wifi——WifiManager

山豆
 山豆
发布于 2014/12/27 11:20
字数 354
阅读 3768
收藏 75

WifiManager工具类:

android包中自带有WifiManager工具类,专门用于wifi管理:

import android.net.wifi.WifiManager;


取得WifiManager对象:

WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);


打开WIFI:

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


创建一个WIFI信息:

public WifiConfiguration CreateWifiInfo(String SSID, String Password,
			int Type) {
		WifiConfiguration config = new WifiConfiguration();
		config.allowedAuthAlgorithms.clear();
		config.allowedGroupCiphers.clear();
		config.allowedKeyManagement.clear();
		config.allowedPairwiseCiphers.clear();
		config.allowedProtocols.clear();
		config.SSID = "\"" + SSID + "\"";

		WifiConfiguration tempConfig = this.IsExsits(SSID);
		if (tempConfig != null) {
			mWifiManager.removeNetwork(tempConfig.networkId);
		}

		if (Type == 1) // WIFICIPHER_NOPASS
		{
			config.wepKeys[0] = "";
			config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
			config.wepTxKeyIndex = 0;
		}
		if (Type == 2) // WIFICIPHER_WEP
		{
			config.hiddenSSID = true;
			config.wepKeys[0] = "\"" + Password + "\"";
			config.allowedAuthAlgorithms
					.set(WifiConfiguration.AuthAlgorithm.SHARED);
			config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
			config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
			config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
			config.allowedGroupCiphers
					.set(WifiConfiguration.GroupCipher.WEP104);
			config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
			config.wepTxKeyIndex = 0;
		}
		if (Type == 3) // WIFICIPHER_WPA
		{
			config.preSharedKey = "\"" + Password + "\"";
			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;
		}
		return config;
	}

这里只介绍第三个参数:Type。从代码中可以看出,Type有三个值,分别为1,2,3。WIFI热点是有加密的,加密方式包括:不加密,WEP,WPA三种,1、2、3就分别对应这三种加密方式,方法返回一个WIFI热点信息。


添加一个网络并连接:

public void addNetwork(WifiConfiguration wcg) {
		int wcgID = mWifiManager.addNetwork(wcg);
		boolean b = mWifiManager.enableNetwork(wcgID, true);
		System.out.println("a--" + wcgID);
		System.out.println("b--" + b);
	}

    具体的使用方式如下:

mWifiAdmin.addNetwork(mWifiAdmin.CreateWifiInfo(SSID, password, 3));


判断WIFI是否连接成功:

public int isWifiContected(Context context) {
		ConnectivityManager connectivityManager = (ConnectivityManager) context
				.getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo wifiNetworkInfo = connectivityManager
				.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
		
		Log.v(TAG, "isConnectedOrConnecting = " + wifiNetworkInfo.isConnectedOrConnecting());
		Log.d(TAG, "wifiNetworkInfo.getDetailedState() = " + wifiNetworkInfo.getDetailedState());
		if (wifiNetworkInfo.getDetailedState() == DetailedState.OBTAINING_IPADDR
				|| wifiNetworkInfo.getDetailedState() == DetailedState.CONNECTING) {
			return WIFI_CONNECTING;
		} else if (wifiNetworkInfo.getDetailedState() == DetailedState.CONNECTED) {
			return WIFI_CONNECTED;
		} else {
			Log.d(TAG, "getDetailedState() == " + wifiNetworkInfo.getDetailedState());
			return WIFI_CONNECT_FAILED;
		}
	}


关闭WIFI连接:

if (mWifiManager.isWifiEnabled()) {
	mWifiManager.setWifiEnabled(false);
}


© 著作权归作者所有

山豆
粉丝 15
博文 14
码字总数 12462
作品 0
杭州
程序员
私信 提问
加载中

评论(5)

山豆
山豆 博主

引用来自“枯鱼之泣”的评论

第一个无密码的你测试没有,好像这么配置连接不成功啊

我都测试过啊,可以用的,你的设备是哪个版本的安卓?
枯鱼之泣
枯鱼之泣
第一个无密码的你测试没有,好像这么配置连接不成功啊
ClodThunder
ClodThunder
写的挺好的
谢明添
谢明添
学习了79
kougin
kougin
学习了60
android wifi 用法解读

关于wifi的操作主要包括以下几个类和接口: 1.1 ScanResult:主要用来描述已经检测出的接入点,包括介入点的地址,介入点的名称,身份认证,频率,信号强度等信息 1.2 wifiConfiguration:w...

sflfqx
2013/04/03
251
0
Android各种Manager-郭通

一、PowerManager 主要是用来控制电源状态,设置屏幕状态,和电池待机状态 PowerManager pm = ((PowerManager)getSystemService(POWER_SERVICE)); 这里我需要保持屏幕长期唤醒,不被锁屏,所...

蓝神100
2018/06/28
0
0
监听系统网络状态

项目开发过程中,总会涉及到网络请求部分,在每个网络请求前都需要判断网络当前的连接状态。本文总结了Android系统服务ConnectivityManager和WifiManager的常用方法。 关键类: Connectivity...

一剑围城
2017/02/14
0
0
Android 8.0 上面关于wifi 的一些坑

背景 现在安卓系统已经更新到8.0了。曾经打开手机wifi以及搜索wifi的方法可能对8.0的安卓系统不管用了。这里就提一些在开发中遇到的坑。 一. 打开wifi 以及 关闭wifi 首先需要开启修改系统设...

Andrewniu
03/20
0
0
Android开发——WiFi信号检测

1.首先在AndroidManifest.xml文件中添加如下代码以开启权限:

薛定谔的op
2018/12/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

前端面试题汇总

一. HTML常见的兼容性 1.HTML5 标签在低版本浏览器不兼容 解决办法:使用html5shiv库,引入下列语句 <!--[if lte IE 8]> <script src="https://cdn.bootcss.com/html5shiv/r29/html5.js"></sc......

蓝小驴
22分钟前
3
0
OSChina 周四乱弹 —— 我气的脸都黑了!

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 小小编辑推荐《Red Battle》- 高橋李依 / 豊崎愛生 《Red Battle》- 高橋李依 / 豊崎愛生 手机党少年们想听歌,请使劲儿戳(这里) @丶Lion ...

小小编辑
35分钟前
410
19
找OSG教程, B站就有

https://www.bilibili.com/video/av64849038?from=search&seid=11632913960900279653

洛克人杰洛
57分钟前
5
0
学习记录(day07-Vue组件、自定义属性、自定义事件)

[TOC] 1.1.1什么是组件 一个vue文件就是一个组件 组件将html标签/css样式/对应JS打包成一个整体,也可以理解钻进一个具有样式和特效的自定义标签。 一、编写组件(提供方)<template> <di...

庭前云落
今天
5
0
使用Prometheus监控SpringBoot应用

通过之前的文章我们使用Prometheus监控了应用服务器node_exporter,数据库mysqld_exporter,今天我们来监控一下你的应用。(本文以SpringBoot 2.1.9.RELEASE 作为监控目标) 编码 添加依赖 使...

JAVA日知录
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部