前言:

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和热点同时开启代码流程梳理相关推荐

  1. Android 10.0 Settings 去掉打开开发者模式和USB调试模式的广播

    目录 1.概述 2. Settings 去掉打开开发者模式和USB调试模式的广播相关核心代码

  2. 猿创征文|Android 10.0 系统去掉省电模式

    目录 1.概述 2.核心代码 3.核心代码功能分析 3.1BatterySaverTile.java 省电模式功能开关相关代码 1.概述 在系统中系统设置里面省电模式的选择中,有智能省电模式 省电模式 ...

  3. Android 10.0 进入recovery模式(等待用户选择recovery模式界面)实现自动恢复出厂设置

    1.概述 在10.0 的产品由于没有音量键 所以用音量键和电源键来选择recovery模式就无法实现了 所以当进入 recovery选择模式界面 就一直停在那里 根据需要 要修改成进入等待用户选择re ...

  4. Android 10.0 PackageManagerService(一)工作原理及启动流程-[Android取经之路]

    摘要:PackageManagerService是Android系统核心服务之一,在Android中的非常重要,主要负责APK.jar包等的管理. 阅读本文大约需要花费50分钟. 文章的内容主要还是从 ...

  5. Android 10.0系统启动之init进程-[Android取经之路]

    摘要:init进程是linux系统中用户空间的第一个进程,进程号为1.当bootloader启动后,启动kernel,kernel启动完后,在用户空间启动init进程,再通过init进程,来读取ini ...

  6. 华为内测基于Android 10.0的EMUI 10系统;2019年Q1真无线耳机市场份额,苹果占半壁江山……...

    关注并标星星CSDN云计算 极客头条:速递.最新.绝对有料.这里有企业新动.这里有业界要闻,打起十二分精神,紧跟fashion你可以的! 每周三次,打卡即read 更快.更全了解泛云圈精彩news g ...

  7. 还在期待安卓9.0吗?Android 10.0要来了

    目前,美国 Google公司的 AndroidP (安卓9.0),已经正式全面推出有几个多月了.众多手机品牌厂商也都在积极的进行更新适配 Android 9.0 系统(修改UI界面也算是二次开发,嗯) ...

  8. Android 10.0 Activity启动详解(二)

    Android 10.0 Activity启动详解(一) 我们在上一篇博客中已经介绍了关于Activity的一些基础概念.这一篇博客我们以Android 10.0的代码来分析Activity的启动流程 ...

  9. Android 10.0相关权限的变更(使用WiFi Direct必须打开定位)

    最近很多厂商推送了Android10.0 的ROM.Android之后,大量的App出现了闪退或者打不开,白屏等问题. Pangu-Immortal (Pangu-Immortal) · GitHub ...

最新文章

  1. 华为服务器HBA卡在哪个位置,服务器hba 设置
  2. 卷积神经网络为什么能称霸计算机视觉领域?
  3. 创建与合并分支-git入门教程
  4. 面试题 gety() getTop() TranslationY关系
  5. 分页及页码导航 用户控件
  6. 如何让脸部变得越来越白?
  7. 直方图均衡 视觉显著_计算机视觉一些项目实战技术(续)
  8. gets()gets_s()puts()函数的使用
  9. Exchange Server 2013安装部署初体验
  10. java batik 字体文件_用 Apache batik 1.10 把svg代码转成png图片,文字丢失???
  11. 基于简单协同过滤推荐算法职位推荐系统
  12. 最简单的 QQ分享、微信分享、一键加QQ群 引入
  13. kettle MongoDB数据迁移至Hbase
  14. 忆龙2009:梦幻魔方V1.2.1.1正式发布
  15. 采用开盘价交易的方法
  16. 李洪超 硬件工程师_工作六年,如何从 layout 转硬件工程师?丨版主采访(一)...
  17. 蛮力法/01背包问题
  18. Java MD5加密解密
  19. 计算机网络系统有哪些核心技术,超级计算机的核心技术是什么
  20. android+查询彩信号码,android 短信 彩信 数据库

热门文章

  1. GitBook运行报错 - Error: ENOENT: no such file or directory, stat
  2. css3 - 图标元素动画效果5 - 弹性动画效果
  3. 【推荐系统论文精读系列】(一)--Amazon.com Recommendations
  4. 搞清楚php-FPM到底是什么?
  5. Android使用Fragment打造万能页面切换框架(三)
  6. 坚果nuts 加速 官网_5G坚果旗舰手机R2发布售价4499元起 搭载全新Smartisan OS 8.0操作系统...
  7. table(单击行,把当行的单选按钮(radio)设为选中状态,并应用当前样式)
  8. hypermesh生成MNF柔性体
  9. 关于ROHDESCHWARZ公司电流探头EZ-17系数修正的说明 1
  10. Python3 装饰器进行log日志输出