Android Q版本实现自动连接WiFi
如何做到自动连接配置wifi:
例:台湾运营商要求自动连接运营商的免费wifi。
开始对wifi加密之类的不是很了解,通过查阅一些资料发现很多方法都不是很适用于Q版本。
所以要自己来搞了。
问题方案如下:
path:alps\frameworks\opt\net\wifi\service\java\com\android\server\wifi\ScanRequestProxy.java
此文件是对wifi开启后对搜索到的wifi列表进行处理,我修改这个需求主要也是在这个文件中进行操作的。
// Verbose logging flag.private boolean mVerboseLoggingEnabled = false;
@@ -131,11 +149,25 @@ public class ScanRequestProxy {if (mVerboseLoggingEnabled) {Log.d(TAG, "Received " + scanResults.length + " scan results");}
+ WifiManager mWifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
+ for (int i = 0; i < scanResults.length; i++) {
+ Log.d("monkey_wifi","isWifiConnected:"+isWifiConnected(mContext));
+ Log.d("monkey_wifi","scanResults[i]:"+scanResults[i]);
+
+ // Monkey.20201218 wifi connected
+ if(scanResults[i].SSID.equals("wifi_ssid") && !isWifiConnected(mContext)){
+
+ WifiConfiguration wifiNewConfiguration = createWifiInfo("wifi_ssid","",1);
+ // WifiConfiguration wifiNewConfiguration = scanResults[i];
+ mWifiManager.save(wifiNewConfiguration,null);//保存
+ mWifiManager.connect(wifiNewConfiguration,null);//连接
+ }
+ }// Only process full band scan results.if (scanData.getBandScanned() == WifiScanner.WIFI_BAND_BOTH_WITH_DFS) {// Store the last scan results & send out the scan completion broadcast.mLastScanResults.clear();
此方法中对所获取到的wifi数组进行遍历,以匹配到我们需求所需要的直连的ssid然后进行config的配置。AndroidQ版本对于wifi的保存和连接方法都很简单,代码中有注释。
+
+ /**
+ * 创建 WifiConfiguration,这里创建的是wpa2加密方式的wifi
+ * Moneky WIFI connected
+ * @param ssid wifi账号
+ * @param password wifi密码
+ * @return
+ */
+
+ private 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 + "\"";
+ if (Type == 0) {
+ // config.wepKeys[0] = "\"" + "\"";
+ config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
+ // config.wepTxKeyIndex = 0;
+ } else if (Type == 1) {
+ Log.i("monkey_wifi", "WPA_config : ");
+ config.hiddenSSID = false;
+ //安全认证协议
+ config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
+ config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X);
+ //企业级WiFi的相关信息输入配置
+ WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig();
+ enterpriseConfig.setIdentity(SSID);//用户身份
+ // enterpriseConfig.setPassword(wifiConnDO.getPassword());//用户密码
+ enterpriseConfig.setAnonymousIdentity("");//匿名身份
+ enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.SIM);//EAP类型
+ // enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.SIM);
+ enterpriseConfig.setCaCertificateAlias("");
+ enterpriseConfig.setClientCertificateAlias("");
+ enterpriseConfig.setIdentity("");
+ enterpriseConfig.setCaPath("");
+ enterpriseConfig.setDomainSuffixMatch("");
+ enterpriseConfig.setSimNum(0);
+ enterpriseConfig.setPassword("");
+
+ config.enterpriseConfig = enterpriseConfig;
+ } else {
+ return null;
+ }
+ Log.i("monkey_wifi", "WIFI_config : "+config);
+ return config;
+
+ }
+
+ public static boolean isWifiConnected(Context context) {
+ ConnectivityManager manager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ if(manager != null) {
+ NetworkCapabilities cap = manager.getNetworkCapabilities(manager.getActiveNetwork());
+ return (cap != null) && cap.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
+ }
+ return false;
+ }
+ //end
通过自定义方法createWifiInfo传出相关参数进行config的配置,config的配置要根据wifi所配置的加密方式来决定使用哪种config。
这里我只定义了两种,其他的加密方式需要配合log打印出具体的config有哪些再进行配置。
我这里定义的两种一种是不适用任何加密方式进行直连,另外一种是使用WAP加密方式,这里强调下,WAP有几种配置,根据需求需要自行选择。
重点记录一点是关于企业级wifi的相关配置要使用WifiEnterpriseConfig进行配置。
至此结束,问题解决。
Android Q版本实现自动连接WiFi相关推荐
- Android 10自动连接WiFi问题 Android 10 断开WiFi问题
说明:本文主要说明扫码之后自动连接WiFi的一些处理,扫码的流程相对简单,网上教程也比较多,对于目前Android各个版本也没有太多变化. 问题描述:最近在做项目的时候,发现以前的项目有扫描二维码自动 ...
- Android Q版本应用兼容性适配指导
目录 Android Q版本应用兼容性适配指导... 1 1. 背景说明... 4 2. 存储空间限制... 4 2.1背景 4 2.2兼容性影响... 5 2.3 适配指 ...
- 一文看懂:Android Q版本在安全方面进行了哪些系统性改进
5月8日凌晨,2019年谷歌I/O开发者大会召开.谷歌下一代Android系统Android Q正式亮相,版本号是10.0.其实早在3月14日,谷歌就放出了Android Q的首个测试版. 那么,此次 ...
- TQ2440 mifi驱动及开机自动连接wifi全过程
想让你的 ARM 也能上网吗?那么请跟我来: 前期准备:买一个小米wifi(淘宝直接搜) 下载linux2.6.30:已共享到我的网盘: http://pan.baidu.com/s/1kUbhoGZ ...
- iOS App无需跳转系统设置自动连接Wi-Fi
一: 介绍 近几年,智能设备越来越火,这些智能设备中,有很大一部分是通过手机来控制硬件设备,来达到预期的效果,这中间少不了要使用到蓝牙功能,通过蓝牙来通信来控制设备. 除了蓝牙控制设备之外,还可以通过 ...
- 树莓派开机自动连接WIFI直接VNC连接界面
对于没有Linux开发经验的新手来说,入手树莓派肯定是有一定的难度,对于我来说,把我走过得弯路,入过的坑,填平. 我接下来的讲述都是基于树莓派4B的4G版本,不带屏幕开发. 我的树莓派装的系统如下图: ...
- 树莓派安装raspberry os,两种方式连接树莓派,并设置静态ip开机自动连接WiFi
Step1 在win10通过[DiskGenius]软件格式化原有的sd卡并删除原有的分区,最后将所有空间新建成一个分区,这样win10就能重新识别这个大存储器. 下面通过[Win32DiskImag ...
- archlinux 开机自动连接wifi
archlinux 开机自动连接wifi archlinux 开机后连接wifi很简单 利用wifi-menu命令就可以选择热点和输入密码 但是重启后又要再来一次. 如果安装了gui, 当然可以利用N ...
- deepin开机未登录自动连接wifi
deepin在开机后没有登录进系统前,不会自动连接wifi.这点对于远程不方便. 另外,如果是使用字符界面启动,也不会连接wifi. 方法很简单: nmcli device wifi connect ...
- html5 自动连接wifi,怎么设置自动切换wifi 点击右上角的【高级设置】
怎么停止手机WIFI自动切换 安卓手机设置禁止自动连接WiFi的方法: 在此以"小米4"手机为例,打开手机"设置"界面,点击"WLAN"项进 ...
最新文章
- 万能的Python,不仅能开发效率高,还能绘画各种漫画图像
- JS编程建议——7:小心保留字的误用
- 盘点:2020年PMCAFF最受欢迎的文章!
- python常见面试题:m1={‘a‘:1,‘b‘:2,‘c‘:1} 将同样的value的key集合在list里,输出{1:[‘a‘,‘c‘],2:[‘b‘]}
- Linux挂载windows中的共享目录步骤及问题解决方案(步骤清晰)
- 计算机网络严楠,安徽工程大学
- 洛谷——P1478 陶陶摘苹果(升级版)
- [转载] 字符串最长重复子串python_查找字符串中重复字符的最长子字符串
- VS中安装.nupkg文件
- Java 安装包下载地址
- python 获取网页特定图片并保存至本地
- php5 安装imagick,为php安装imagick拓展与image magick图像处理库
- 2019江西(南昌)安博会 数字冰雹“警视”即将惊艳亮相
- android 阿拉伯语文字方向,android – 如何将RTL文本(阿拉伯语)绘制到位图并正确排序?...
- 苹果关闭 iOS 14.4.2 系统验证通道
- 洛谷4208 最小生成树计数
- php文章相似度计算,PHP相似度算法
- 详解one-hot编码及代码举例
- java智力题扑克牌_数学智力题:猜扑克牌
- LightOJ - 1079 Just another Robbery —— 概率、背包
热门文章
- NOJ-1148-石子合并
- ubuntu系统镜像文件下载
- python爬虫记一次cookie翻车
- 为程序员提供一杯免费咖啡
- 线代 [7]|实对称矩阵
- 微软Hololens学院教程-Hologram 212-Voice(语音)【微软教程已经更新,本文是老版本】...
- oracle 11g 安装 先决性检查 环境变量,Window XP安装oracle11gR2数据库先决条件检查的问题解决(实测有效)...
- 我用php构建了魔兽世界服务器,只为证明php是世界上最好的语言
- [Irving]SqlServer 标量函数 详解【转】
- 猫哥教你写爬虫 033--爬虫初体验-BeautifulSoup-作业