通过WifiManager可以实现对wifi进行操作,实现wifi自动连接等一些功能

摘要: 通过WifiManager可以实现对wifi进行操作,实现wifi自动连接等一些功能。
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(SSIDpassword, 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);
}
实现Android 13的WIFI自动连接,可以通过以下步骤: 1. 在AndroidManifest.xml文件中添加以下权限: ``` <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> ``` 2. 在代码中获取WifiManager对象: ``` WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); ``` 3. 判断是否连接过指定的WIFI,并连接: ``` WifiConfiguration wifiConfiguration = null; List<WifiConfiguration> configuredNetworks = wifiManager.getConfiguredNetworks(); for (WifiConfiguration config : configuredNetworks) { if (config.SSID != null && config.SSID.equals("\"" + ssid + "\"")) { wifiConfiguration = config; break; } } if (wifiConfiguration != null) { wifiManager.enableNetwork(wifiConfiguration.networkId, true); } else { // 如果没有连接过指定的WIFI,则创建新的WIFI配置,并连接 wifiConfiguration = new WifiConfiguration(); wifiConfiguration.SSID = "\"" + ssid + "\""; wifiConfiguration.preSharedKey = "\"" + password + "\""; int netId = wifiManager.addNetwork(wifiConfiguration); wifiManager.enableNetwork(netId, true); } ``` 其中,ssid和password分别代表要连接WIFI的SSID和密码。 4. 添加BroadcastReceiver监听WIFI连接状态变化: ``` private BroadcastReceiver wifiReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) { NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); if (info.isConnected()) { // WIFI连接 } else { // WIFI连接 } } } }; // 注册BroadcastReceiver IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); registerReceiver(wifiReceiver, intentFilter); ``` 这样,当WIFI连接状态变化时,就会收到广播,从而可以处理相应的逻辑。 注意:在Android 13中,为了保护用户隐私,系统对应用程序的WIFI连接能力进行了限制,并且需要用户在设置中手动授权。因此,在实现WIFI自动连接时,需要在应用程序中请求相应的权限,并引导用户进行授权。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值