当前位置: 首页 > news >正文

Android WIFI工具类 特别兼容Android12

直接上代码:

package com.realtop.commonutils.utils;import android.annotation.SuppressLint;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.net.IpConfiguration;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiEnterpriseConfig;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.text.TextUtils;
import android.util.Log;import java.util.ArrayList;
import java.util.List;public class WIFIHelper {public static final String TAG = "wifi_utils";public static String getForgetName(WifiManager manager) {WifiInfo connectionInfo = manager.getConnectionInfo();String ssid = connectionInfo.getSSID().replace("\"", "");return ssid;}public static void forgetNetwork(WifiManager manager) {try {WifiInfo connectionInfo = manager.getConnectionInfo();String ssid = connectionInfo.getSSID().replace("\"", "");int networkId = connectionInfo.getNetworkId();Log.i(TAG, "forgetNetwork: enter:" + ssid + "; " + networkId);manager.forget(networkId, new WifiManager.ActionListener() {@Overridepublic void onSuccess() {Log.i(TAG, "forgetNetwork: onSuccess: is ok");manager.removeNetwork(networkId);}@Overridepublic void onFailure(int reason) {Log.i(TAG, "forgetNetwork: onFailure: reason:" + reason);manager.removeNetwork(networkId);}});ComUtils.saveString(ComConfig.WIFI_PWD_PRE + ssid, "");Log.i(TAG, "forgetNetwork: remove id:" + networkId + ";" + ssid);} catch (Exception e) {e.printStackTrace();Log.i(TAG, "forgetNetwork: error:" + e.getMessage());}}/*** 连接wifi** @param manager       WifiManager* @param configuration Wifi配置* @return 是否连接成功*/public static boolean connectWifi(WifiManager manager, WifiConfiguration configuration) {Log.i(TAG, "connectWifi: enter");manager.connect(configuration, new WifiManager.ActionListener() {@Overridepublic void onSuccess() {Log.i(TAG, "connectWifi: onSuccess: connect ok");}@Overridepublic void onFailure(int reason) {Log.i(TAG, "connectWifi: onFailure: error:" + reason);}});return true;}/*** 创建Wifi配置** @param SSID         wifi名称* @param password     wifi密码* @param hidden       网络是否隐藏(该方法与添加隐藏网络通用)* @param capabilities 网络安全协议* @return 配置好的wifi*/public static WifiConfiguration createWifiInfo(String SSID, String password, boolean hidden, String capabilities) {WifiConfiguration configuration = new WifiConfiguration();configuration.SSID = "\"" + SSID + "\"";if (hidden) {configuration.hiddenSSID = true;}Log.d("WifiManagerUtils", "createWifiInfo: " + capabilities);if (capabilities.contains("SAE") && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {setWPA3(configuration, password);} else if (capabilities.contains("WPA-PSK") || capabilities.contains("WPA2-PSK")) {setWPA(configuration, password);} else if (capabilities.contains("WEP")) {setWEP(configuration, password);} else {setESS(configuration);}return configuration;}@SuppressLint("NewApi")public static WifiConfiguration createWifiConfiguration(String SSID, String password, boolean hidden, String capabilities) {WifiConfiguration config = new WifiConfiguration();config.SSID = "\"" + SSID + "\"";config.hiddenSSID = hidden;config.shared = false;Log.d("WifiManagerUtils", "createWifiInfo: " + capabilities);// 分别适配安全类型if (capabilities.contains("SAE")) {config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_SAE);if (!TextUtils.isEmpty(password)) {config.preSharedKey = '"' + password + '"';}Log.i(TAG, "createWifiConfiguration: sae");} else if (capabilities.contains("WPA-PSK") || capabilities.contains("WPA2-PSK")) {config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);if (!TextUtils.isEmpty(password)) {if (password.matches("[0-9A-Fa-f]{64}")) {config.preSharedKey = password;} else {config.preSharedKey = '"' + password + '"';}}Log.i(TAG, "createWifiConfiguration: psk");} else if (capabilities.contains("WEP")) {config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_WEP);if (!TextUtils.isEmpty(password)) {int length = password.length();// WEP-40, WEP-104, and 256-bit WEP (WEP-232?)if ((length == 10 || length == 26 || length == 58)&& password.matches("[0-9A-Fa-f]*")) {config.wepKeys[0] = password;} else {config.wepKeys[0] = '"' + password + '"';}}Log.i(TAG, "createWifiConfiguration: wep");} else if (capabilities.contains("OWE")) {config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OWE);Log.i(TAG, "createWifiConfiguration: owe");} else if (capabilities.contains("EAP")) {setEAP(config, password);Log.i(TAG, "createWifiConfiguration: eap");} else {// 无密码config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OPEN);config.shared = true;Log.i(TAG, "createWifiConfiguration: open");}final IpConfiguration ipConfig = new IpConfiguration();ipConfig.setIpAssignment(IpConfiguration.IpAssignment.UNASSIGNED);ipConfig.setProxySettings(IpConfiguration.ProxySettings.UNASSIGNED);ipConfig.setStaticIpConfiguration(null);ipConfig.setHttpProxy(null);config.setIpConfiguration(ipConfig);return config;}private static void setEAP(WifiConfiguration wifiConfig, String password) {// 设置身份验证类型为 EAPwifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);// 设置 EAP 方法(这是具体的 EAP 身份验证类型)wifiConfig.enterpriseConfig.setEapMethod(-1);// 设置身份验证用户名和密码wifiConfig.enterpriseConfig.setIdentity("");wifiConfig.enterpriseConfig.setPassword(password);}/*** 设置wpa3协议** @param configuration 配置* @param password      密码*/public static void setWPA3(WifiConfiguration configuration, String password) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SAE);}configuration.preSharedKey = "\"" + password + "\"";}/*** WPA协议** @param configuration 配置* @param password      密码*/public static void setWPA(WifiConfiguration configuration, String password) {configuration.preSharedKey = "\"" + password + "\"";//公认的IEEE 802.11验证算法。configuration.allowedAuthAlgorithms.clear();configuration.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);//公认的的公共组密码。configuration.allowedGroupCiphers.clear();configuration.allowedGroupCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);//公认的密钥管理方案。configuration.allowedKeyManagement.clear();configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);//密码为WPA。configuration.allowedPairwiseCiphers.clear();configuration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);configuration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);//公认的安全协议。configuration.allowedProtocols.clear();configuration.allowedProtocols.set(WifiConfiguration.Protocol.RSN);}/*** WEP协议** @param configuration 配置* @param password      密码*/public static void setWEP(WifiConfiguration configuration, String password) {configuration.wepKeys[0] = "\"" + password + "\"";configuration.wepTxKeyIndex = 0;configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);}/*** 无密码** @param configuration 配置*/public static void setESS(WifiConfiguration configuration) {configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);}public static List<BluetoothDevice> getBlueConnectDevices() {BluetoothManager bluetoothManager = (BluetoothManager) EventBusHelper.getContext().getSystemService(Context.BLUETOOTH_SERVICE);@SuppressLint("MissingPermission")List<BluetoothDevice> connectedDevices = bluetoothManager.getConnectedDevices(BluetoothProfile.GATT);if (connectedDevices != null) {return connectedDevices;} else {return new ArrayList<>();}}
}
http://www.lryc.cn/news/159150.html

相关文章:

  • 【Android Framework系列】第14章 Fragment核心原理(AndroidX版本)
  • Python 网页爬虫原理及代理 IP 使用
  • 失效的访问控制及漏洞复现
  • MLOps:掌握机器学习部署:Docker、Kubernetes、Helm 现代 Web 框架
  • Python标识符命名规范
  • 对 fastq 和 bam 进行 downsample
  • 网络爬虫:如何有效的检测分布式爬虫
  • elementUI可拖拉宽度抽屉
  • OpenPCDet系列 | 8.4 nuScenes数据集数据调用和数据分析
  • WeiTitlePopupWindow
  • qemu/kvm学习笔记
  • android 车载widget小部件部分详细源码实战开发-千里马车载车机framework开发实战课程
  • 如何使用CSS画一个三角形
  • 第15章_锁: (表级锁、页级锁、行锁、悲观锁、乐观锁、全局锁、死锁)
  • python音频转文字调用baidu
  • 靶场溯源第二题
  • mysql 的增删改查以及模糊查询、字符集语句的使用
  • Python Django框架中文教程:学习简单、灵活、高效的Web应用程序框架
  • Docker认识即安装
  • chrome 谷歌浏览器 导出插件拓展和导入插件拓展
  • fastjson漏洞批量检测工具
  • Vue进阶(六十七)页面刷新路由传参丢失问题分析及解决
  • 阿里云ubuntu服务器搭建ftp服务器
  • 03 卷积操作图片
  • 软考:中级软件设计师:程序语言基础:表达式,标准分类,法律法规,程序语言特点,函数传值传址
  • Java“牵手”1688商品详情数据,1688商品详情API接口,1688API接口申请指南
  • stable diffusion实践操作-批次出图
  • LeetCode热题100 【cpp】题解(一)哈希表和双指针
  • Python爬虫常见代理池实现和优化
  • 前端面试的话术集锦第 3 篇:进阶篇上