Android 10.0热点为Enhanced Open模式时不允许WiFI和热点同时开启代码流程梳理
前言:
WLAN Enhanced Open 官方介绍
WLAN Enhanced Open :WiFi增强开放,这个功能就是当手机开启热点时,Securty的一个选项,与WPA2/WPA3同级,Enhanced Open就是不设置密码,但是增强了安全性。
我们知道Android 9 引入了可让设备同时在 STA 和 AP 模式下运行的功能,也就是可以同时连接WiFi和开启热点。但是在Android 10中,如果手机热点的安全选项为Enhanced Open,则不支持WiFi和热点同时开启。如果热点的安全选项为WPA2或者WPA3,则可以同时开启热点和WiFi。
代码流程:
下面我们来看这个功能在代码中是怎么设置的:
1、开启热点我们直接看WifiServiceImpl的startSoftApInternal,至于打开热点流程以及怎么走到这个函数的,可以看我之前的总结 热点开启流程。
startSoftApInternal会调用setDualSapMode函数,这个函数是干什么的呢,我们后面会讲,这个很关键。
如果validateApWifiConfiguration函数返回true,则发送CMD_SET_AP的消息,由WifiController处理。
android/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java
private boolean startSoftApInternal(WifiConfiguration wifiConfig, int mode) {setDualSapMode(wifiConfig);.............// null wifiConfig is a meaningful input for CMD_SET_APif (wifiConfig == null || WifiApConfigStore.validateApWifiConfiguration(wifiConfig)) {SoftApModeConfiguration softApConfig = new SoftApModeConfiguration(mode, wifiConfig);mWifiController.sendMessage(CMD_SET_AP, 1, 0, softApConfig);return true;}Slog.e(TAG, "Invalid WifiConfiguration");return false;
}
2、WifiController一开始是在DefaultState ,我们看CMD_SET_AP的处理过程:
看这个判断语句 if (msg.arg1 == 1 && mWifiApConfigStore.getDualSapStatus()) ,这个如果返回true,则 mActiveModeWarden.disableWifi ,也就是关闭 WiFi 。 msg.arg1 的值就是 CMD_SET_AP 的第一个参数,我们可以从上面 mWifiController.sendMessage(CMD_SET_AP, 1, 0, softApConfig) 看到是 1 。然后再看 mWifiApConfigStore.getDualSapStatus ,这个函数为什么返回的是 true 呢?
android/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiController.java
class DefaultState extends State {@Overridepublic boolean processMessage(Message msg) {switch (msg.what) {case CMD_SET_AP:if (msg.arg1 == 1 && mWifiApConfigStore.getDualSapStatus()) {mActiveModeWarden.disableWifi();transitionTo(mStaDisabledState);}if (msg.arg1 == 1) {SoftApModeConfiguration config = (SoftApModeConfiguration) msg.obj;mActiveModeWarden.enterSoftAPMode((SoftApModeConfiguration) msg.obj);} else {mActiveModeWarden.stopSoftAPMode(msg.arg2);}break;
3、getDualSapStatus 函数就是获取 mDualSapStatus 的值。mDualSapStatus 的值是谁设的呢?这里就明白我们一开始说的 WifiServiceImpl 的 startSoftApInternal 函数中一开始执行的 setDualSapMode 的。setDualSapMode 把 mDualSapStatus 设为了 true。
android/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiApConfigStore.java
public synchronized boolean getDualSapStatus() {return mDualSapStatus;
}
4、我们看 setDualSapMode 函数,apConfig.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.OWE) 这个函数就是判断AP是否是OWE模式,OWE也就是我们所说的 Enhanced Open 。所以当AP为Enhanced Open时,会把 mDualSapStatus 设为 true 。
android/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java
private void setDualSapMode(WifiConfiguration apConfig) {if (apConfig == null)apConfig = mWifiApConfigStore.getApConfiguration();if (apConfig.apBand == WifiConfiguration.AP_BAND_DUAL|| apConfig.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.OWE)) {mLog.trace("setDualSapMode uid=%").c(Binder.getCallingUid()).flush();mWifiApConfigStore.setDualSapStatus(true);} else {mWifiApConfigStore.setDualSapStatus(false);}
}
分析到这里,也就很清楚为什么 AP 设为 Enhanced Open 模式的时候不支持 WiFi 和 热点共存了。
关注公众号,获取更多开发必备知识
Android 10.0热点为Enhanced Open模式时不允许WiFI和热点同时开启代码流程梳理相关推荐
- Android 10.0 Settings 去掉打开开发者模式和USB调试模式的广播
目录 1.概述 2. Settings 去掉打开开发者模式和USB调试模式的广播相关核心代码
- 猿创征文|Android 10.0 系统去掉省电模式
目录 1.概述 2.核心代码 3.核心代码功能分析 3.1BatterySaverTile.java 省电模式功能开关相关代码 1.概述 在系统中系统设置里面省电模式的选择中,有智能省电模式 省电模式 ...
- Android 10.0 进入recovery模式(等待用户选择recovery模式界面)实现自动恢复出厂设置
1.概述 在10.0 的产品由于没有音量键 所以用音量键和电源键来选择recovery模式就无法实现了 所以当进入 recovery选择模式界面 就一直停在那里 根据需要 要修改成进入等待用户选择re ...
- Android 10.0 PackageManagerService(一)工作原理及启动流程-[Android取经之路]
摘要:PackageManagerService是Android系统核心服务之一,在Android中的非常重要,主要负责APK.jar包等的管理. 阅读本文大约需要花费50分钟. 文章的内容主要还是从 ...
- Android 10.0系统启动之init进程-[Android取经之路]
摘要:init进程是linux系统中用户空间的第一个进程,进程号为1.当bootloader启动后,启动kernel,kernel启动完后,在用户空间启动init进程,再通过init进程,来读取ini ...
- 华为内测基于Android 10.0的EMUI 10系统;2019年Q1真无线耳机市场份额,苹果占半壁江山……...
关注并标星星CSDN云计算 极客头条:速递.最新.绝对有料.这里有企业新动.这里有业界要闻,打起十二分精神,紧跟fashion你可以的! 每周三次,打卡即read 更快.更全了解泛云圈精彩news g ...
- 还在期待安卓9.0吗?Android 10.0要来了
目前,美国 Google公司的 AndroidP (安卓9.0),已经正式全面推出有几个多月了.众多手机品牌厂商也都在积极的进行更新适配 Android 9.0 系统(修改UI界面也算是二次开发,嗯) ...
- Android 10.0 Activity启动详解(二)
Android 10.0 Activity启动详解(一) 我们在上一篇博客中已经介绍了关于Activity的一些基础概念.这一篇博客我们以Android 10.0的代码来分析Activity的启动流程 ...
- Android 10.0相关权限的变更(使用WiFi Direct必须打开定位)
最近很多厂商推送了Android10.0 的ROM.Android之后,大量的App出现了闪退或者打不开,白屏等问题. Pangu-Immortal (Pangu-Immortal) · GitHub ...
最新文章
- 华为服务器HBA卡在哪个位置,服务器hba 设置
- 卷积神经网络为什么能称霸计算机视觉领域?
- 创建与合并分支-git入门教程
- 面试题 gety() getTop() TranslationY关系
- 分页及页码导航 用户控件
- 如何让脸部变得越来越白?
- 直方图均衡 视觉显著_计算机视觉一些项目实战技术(续)
- gets()gets_s()puts()函数的使用
- Exchange Server 2013安装部署初体验
- java batik 字体文件_用 Apache batik 1.10 把svg代码转成png图片,文字丢失???
- 基于简单协同过滤推荐算法职位推荐系统
- 最简单的 QQ分享、微信分享、一键加QQ群 引入
- kettle MongoDB数据迁移至Hbase
- 忆龙2009:梦幻魔方V1.2.1.1正式发布
- 采用开盘价交易的方法
- 李洪超 硬件工程师_工作六年,如何从 layout 转硬件工程师?丨版主采访(一)...
- 蛮力法/01背包问题
- Java MD5加密解密
- 计算机网络系统有哪些核心技术,超级计算机的核心技术是什么
- android+查询彩信号码,android 短信 彩信 数据库
热门文章
- GitBook运行报错 - Error: ENOENT: no such file or directory, stat
- css3 - 图标元素动画效果5 - 弹性动画效果
- 【推荐系统论文精读系列】(一)--Amazon.com Recommendations
- 搞清楚php-FPM到底是什么?
- Android使用Fragment打造万能页面切换框架(三)
- 坚果nuts 加速 官网_5G坚果旗舰手机R2发布售价4499元起 搭载全新Smartisan OS 8.0操作系统...
- table(单击行,把当行的单选按钮(radio)设为选中状态,并应用当前样式)
- hypermesh生成MNF柔性体
- 关于ROHDESCHWARZ公司电流探头EZ-17系数修正的说明 1
- Python3 装饰器进行log日志输出