如何做到自动连接配置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相关推荐

  1. Android 10自动连接WiFi问题 Android 10 断开WiFi问题

    说明:本文主要说明扫码之后自动连接WiFi的一些处理,扫码的流程相对简单,网上教程也比较多,对于目前Android各个版本也没有太多变化. 问题描述:最近在做项目的时候,发现以前的项目有扫描二维码自动 ...

  2. Android Q版本应用兼容性适配指导

    目录 Android Q版本应用兼容性适配指导... 1 1.      背景说明... 4 2.      存储空间限制... 4 2.1背景     4 2.2兼容性影响... 5 2.3 适配指 ...

  3. 一文看懂:Android Q版本在安全方面进行了哪些系统性改进

    5月8日凌晨,2019年谷歌I/O开发者大会召开.谷歌下一代Android系统Android Q正式亮相,版本号是10.0.其实早在3月14日,谷歌就放出了Android Q的首个测试版. 那么,此次 ...

  4. TQ2440 mifi驱动及开机自动连接wifi全过程

    想让你的 ARM 也能上网吗?那么请跟我来: 前期准备:买一个小米wifi(淘宝直接搜) 下载linux2.6.30:已共享到我的网盘: http://pan.baidu.com/s/1kUbhoGZ ...

  5. iOS App无需跳转系统设置自动连接Wi-Fi

    一: 介绍 近几年,智能设备越来越火,这些智能设备中,有很大一部分是通过手机来控制硬件设备,来达到预期的效果,这中间少不了要使用到蓝牙功能,通过蓝牙来通信来控制设备. 除了蓝牙控制设备之外,还可以通过 ...

  6. 树莓派开机自动连接WIFI直接VNC连接界面

    对于没有Linux开发经验的新手来说,入手树莓派肯定是有一定的难度,对于我来说,把我走过得弯路,入过的坑,填平. 我接下来的讲述都是基于树莓派4B的4G版本,不带屏幕开发. 我的树莓派装的系统如下图: ...

  7. 树莓派安装raspberry os,两种方式连接树莓派,并设置静态ip开机自动连接WiFi

    Step1 在win10通过[DiskGenius]软件格式化原有的sd卡并删除原有的分区,最后将所有空间新建成一个分区,这样win10就能重新识别这个大存储器. 下面通过[Win32DiskImag ...

  8. archlinux 开机自动连接wifi

    archlinux 开机自动连接wifi archlinux 开机后连接wifi很简单 利用wifi-menu命令就可以选择热点和输入密码 但是重启后又要再来一次. 如果安装了gui, 当然可以利用N ...

  9. deepin开机未登录自动连接wifi

    deepin在开机后没有登录进系统前,不会自动连接wifi.这点对于远程不方便. 另外,如果是使用字符界面启动,也不会连接wifi. 方法很简单: nmcli device wifi connect ...

  10. html5 自动连接wifi,怎么设置自动切换wifi 点击右上角的【高级设置】

    怎么停止手机WIFI自动切换 安卓手机设置禁止自动连接WiFi的方法: 在此以"小米4"手机为例,打开手机"设置"界面,点击"WLAN"项进 ...

最新文章

  1. 万能的Python,不仅能开发效率高,还能绘画各种漫画图像
  2. JS编程建议——7:小心保留字的误用
  3. 盘点:2020年PMCAFF最受欢迎的文章!
  4. python常见面试题:m1={‘a‘:1,‘b‘:2,‘c‘:1} 将同样的value的key集合在list里,输出{1:[‘a‘,‘c‘],2:[‘b‘]}
  5. Linux挂载windows中的共享目录步骤及问题解决方案(步骤清晰)
  6. 计算机网络严楠,安徽工程大学
  7. 洛谷——P1478 陶陶摘苹果(升级版)
  8. [转载] 字符串最长重复子串python_查找字符串中重复字符的最长子字符串
  9. VS中安装.nupkg文件
  10. Java 安装包下载地址
  11. python 获取网页特定图片并保存至本地
  12. php5 安装imagick,为php安装imagick拓展与image magick图像处理库
  13. 2019江西(南昌)安博会 数字冰雹“警视”即将惊艳亮相
  14. android 阿拉伯语文字方向,android – 如何将RTL文本(阿拉伯语)绘制到位图并正确排序?...
  15. 苹果关闭 iOS 14.4.2 系统验证通道
  16. 洛谷4208 最小生成树计数
  17. php文章相似度计算,PHP相似度算法
  18. 详解one-hot编码及代码举例
  19. java智力题扑克牌_数学智力题:猜扑克牌
  20. LightOJ - 1079 Just another Robbery —— 概率、背包

热门文章

  1. NOJ-1148-石子合并
  2. ubuntu系统镜像文件下载
  3. python爬虫记一次cookie翻车
  4. 为程序员提供一杯免费咖啡
  5. 线代 [7]|实对称矩阵
  6. 微软Hololens学院教程-Hologram 212-Voice(语音)【微软教程已经更新,本文是老版本】...
  7. oracle 11g 安装 先决性检查 环境变量,Window XP安装oracle11gR2数据库先决条件检查的问题解决(实测有效)...
  8. 我用php构建了魔兽世界服务器,只为证明php是世界上最好的语言
  9. [Irving]SqlServer 标量函数 详解【转】
  10. 猫哥教你写爬虫 033--爬虫初体验-BeautifulSoup-作业