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

广州第一网站中山精品网站建设精英

广州第一网站,中山精品网站建设精英,功能型网站制作多少钱,中国十大龙头企业排名Android P相比于Android O的变化 多了WifiStateMachinePrime#xff08;状态机的前处理机制#xff09;#xff0c;wifiService的相关cmd 不再是直接send 给WifiStateMachine#xff0c;而是被送到WifiStateMachinePrime先进行处理后#xff0c;再送往WifiStateMachine也…Android P相比于Android O的变化 多了WifiStateMachinePrime状态机的前处理机制wifiService的相关cmd 不再是直接send 给WifiStateMachine而是被送到WifiStateMachinePrime先进行处理后再送往WifiStateMachine也多了一层ClientModeManager处理将之前初始化wpa_supplicant专门抽出一层类在这里面来做详细看后面的代码 Wifi 整体流程框架图 基本与Android O Wifi 主体框架一致三板斧的套路还是被传承下来1. Application – 2. WiFiService(WifiStateMachine) – 3. WifiNativewpa_supplicant – wlan drv 代码流程 1. WifiSettings -- WifiManager 点击 wifi button 开启wifi 触发的代码流程如下 wifiSettings 响应onPreferenceTreeClick 送往WifiEnableWifiEnabler 根据传入的状态call WifiManager 设置wifi状态 开启跳转到WifiServiceImpl packages/apps/Settings/src/com/android/settings/wifi/WifiSettings.javapublic boolean onPreferenceTreeClick(Preference preference){..... return super.onPreferenceTreeClick(preference);}packages/apps/Settings/src/com/android/settings/wifi/WifiEnabler.java public boolean onSwitchToggled(boolean isChecked){ .... mWifiManager.setWifiEnabled(isChecked); // wifiManager 设置wifi 状态 } 2. WifiManager -- WifiService -- WifiServiceImpl --WifiController 还是老套路逐级进入WifiServiceWifiServiceImpl WifiControllerWifiStateMachinePrimeWifiNative 等完成CMD_WIFI_TOGGLED的火炬传递注意随着Android 版本升级后接递火炬CMD_WIFI_TOGGLED的顺序也发生了变化Android P 版本WifiServiceImpl 将CMD_WIFI_TOGGLED 先送到了WifiController处理这里稍微有点儿复杂的状态机都会涉及到处理此cmd具体根据设备所处状态来跟就可以。这里以设备从开机状态第一次打开wifi为场景进行说明此case 直接会进入 frameworks/base/wifi/java/android/net/wifi/WifiManager.java public boolean setWifiEnabled(boolean enabled){return mService.setWifiEnabled(mContext.getOpPackageName(), enabled); // jump to WifiServiceImpl }frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java public synchronized boolean setWifiEnabled(String packageName, boolean enable){ .... mWifiController.sendMessage(CMD_WIFI_TOGGLED); }frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiController.javaclass StaDisabledState extends State { ....public boolean processMessage(Message msg) {switch (msg.what) {case CMD_WIFI_TOGGLED:.....transitionTo(mDeviceActiveState); // jump to DeviceActiveState } }class DeviceActiveState extends State {public void enter() {mWifiStateMachinePrime.enterClientMode(); // jump to WifiStateMachinePrimemWifiStateMachine.setHighPerfModeEnabled(false);}} 3. WifiController -- WifiStateMachinePrime WifiStateMachinePrime 传递CMD_START_CLIENT_MODE先在内部状态机完成一轮转动ModeStateMachine -- ClientModeActiveState送往ClientModeManager 创建WifiClientModeManager 实例 frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachinePrime.java public void enterClientMode() { changeMode(ModeStateMachine.CMD_START_CLIENT_MODE); }private class ModeStateMachine extends StateMachine { ...private boolean checkForAndHandleModeChange(Message message) {case ModeStateMachine.CMD_START_CLIENT_MODE:mModeStateMachine.transitionTo(mClientModeActiveState); //跳转到ClientModeActiveState}}class ClientModeActiveState extends ModeActiveState {public void enter() {mManager mWifiInjector.makeClientModeManager(mListener); //创建ClientModeManager实例mManager.start(); //mActiveModeManagers.add(mManager);updateBatteryStatsWifiState(true);} }4. WifiStateMachinePrime -- ClientModeManager ClientModeManager 传递ClientModeStateMachine.CMD_START 开始wpa_supplicant初始化信号更新 wifiState updateWifiState通过WifiNative初始化Client Mode frameworks/opt/net/wifi/service/java/com/android/server/wifi/ClientModeManager.java public void start() { mStateMachine.sendMessage(ClientModeStateMachine.CMD_START); }private class IdleState extends State { public boolean processMessage(Message message) {case CMD_START:updateWifiState(WifiManager.WIFI_STATE_ENABLING,WifiManager.WIFI_STATE_DISABLED);mClientInterfaceName mWifiNative.setupInterfaceForClientMode(false /* not low priority */, mWifiNativeInterfaceCallback);if (TextUtils.isEmpty(mClientInterfaceName)) {Log.e(TAG, Failed to create ClientInterface. Sit in Idle);updateWifiState(WifiManager.WIFI_STATE_UNKNOWN,WifiManager.WIFI_STATE_ENABLING);updateWifiState(WifiManager.WIFI_STATE_DISABLED,WifiManager.WIFI_STATE_UNKNOWN);break;}sendScanAvailableBroadcast(false); //send wifi Scan Available BroadcastmScanRequestProxy.enableScanningForHiddenNetworks(false);mScanRequestProxy.clearScanResults();transitionTo(mStartedState);} } 5. ClientModeManager -- WifiNative ClientModeManager 通过CMD_START 将启动传递给WifiNativeWifiNative 启动wpa_supplicant servicewifiNative 通过SupplicantStaHal 建立与 wpa_supplicant/hidl/1.1 的sta_iface.cpp 关联ifaceNamewifiNative 向NetworkManagementService 注册NetworkObserverInternal 实例用于监视 设备iface一举一动wifiNative 开启wifiMonitor 其开始接手所有的事项消息以及事件一有变化就上报framework(wifiStateMachine、wifiServiceImpl、SupplicantStaIfaceHal等等就像是东厂的小兵监视着下面的一举一动一有变化马上上报头头 frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiNative.java public String setupInterfaceForClientMode(boolean lowPrioritySta, NonNull InterfaceCallback interfaceCallback) {... startSupplicant(); // 启动 wpa_supplicant .. mWificondControl.setupInterfaceForClientMode(iface.name); // 初始化与wificondcontrol 关联(用于后续wificond 作为framework与 wpa_supplicant 之间的通信信使..mSupplicantStaIfaceHal.setupIface(iface.name); // mWifiMonitor.startMonitoring(iface.name); // 启动WifiMonitor 上报所有的wpa_supplicant msgevent initializeNwParamsForClientInterface(iface.name); }6. WifiNative– WificondControl WificondControl 通过 binder 连接到wificond server.cpp创建ClientInterfaceWificondControl 通过binder 连接到 client_interface_binder.cpp 获取 wificondScaner 用于wifi scan上报scan resultsWificondControl 创建 pnoScan Scan Event Handler 且将之与设备 ifaceName 关联 frameworks/opt/net/wifi/service/java/com/android/server/wifi/WificondControl.java frameworks/opt/net/wifi/service/java/com/android/server/wifi/WificondControl.javapublic IClientInterface setupInterfaceForClientMode(NonNull String ifaceName){... clientInterface mWificond.createClientInterface(ifaceName); //创建ClientInterface..mClientInterfaces.put(ifaceName, clientInterface); IWifiScannerImpl wificondScanner clientInterface.getWifiScannerImpl(); // 获取WifiScannerImplPnoScanEventHandler pnoScanEventHandler new PnoScanEventHandler(ifaceName);mPnoScanEventHandlers.put(ifaceName, pnoScanEventHandler);wificondScanner.subscribePnoScanEvents(pnoScanEventHandler); }
http://www.hkea.cn/news/14588975/

相关文章:

  • 高校校园网站建设培训班世界500强企业招聘网站
  • 网站制作建设是做什么网站建设 实训意见和建议
  • 网站pc端网址和手机端网址建设网站后台 语言
  • 实现网站开发野望王维
  • 菏泽炫佑网站建设网页设计实训报告总结3000字
  • 视频网站上市公司有哪些php与 wordpress
  • seo视频教程百度云网站站群优化
  • 网站建设哪家好 北京lnmp wordpress 登陆
  • 属于网站建设过程规划小说网站怎么做流量
  • 北京市丰台区建设部官方网站电脑网页怎么截图
  • 建筑设计自学网站域名 和网站有什么区别吗
  • 网站须知郴州新网最新招聘
  • 长春火车站最新防疫要求怎么做淘宝推广网站
  • 网站开发属于什么岗位重庆工程信息网查询
  • wix做的免费网站可以用吗深圳网站建设公司服务怎么做
  • c 还可以做网站沈阳公司建站
  • 河北企业网站设计深圳网络营销培训
  • 如何用图片做网站背景网站高端
  • 莒南建设局网站仿什么值得买wordpress
  • 做公司网站找谁wordpress 文章 视频
  • WordPress怎么批量上传图片杭州网络推广网络优化
  • 高大上网站建设公司前几年做啥网站能致富
  • 绵阳个人网站建设网站的流量怎么赚钱
  • 物业公司网站建设厦门网站建设68
  • 宁波网站建设联系荣胜电商网站开发案例
  • 网站销售怎么样深圳网站建设公司招聘
  • seo网站推广服务谷歌搜索引擎为什么打不开
  • 用php做网站难吗wordpress xml 导入失败
  • 网站做转链接违反版权吗信阳市商务局网站加油站建设公告
  • 自己做整个网站的流程wordpress title