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

六安网站建设如何做百度免费推广

六安网站建设,如何做百度免费推广,国内外ai设计素材网站,湖南网站营销优化靠谱Android P相比于Android O的变化 多了WifiStateMachinePrime(状态机的前处理机制),wifiService的相关cmd 不再是直接send 给WifiStateMachine,而是被送到WifiStateMachinePrime先进行处理后,再送往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. WifiNative(wpa_supplicant – wlan drv))

代码流程

1. WifiSettings --> WifiManager

点击 wifi button 开启wifi 触发的代码流程如下,

  • wifiSettings 响应onPreferenceTreeClick 送往WifiEnable
  • WifiEnabler 根据传入的状态,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

  • 还是老套路,逐级进入WifiService,WifiServiceImpl ,WifiController,WifiStateMachinePrime,WifiNative 等完成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 将启动传递给WifiNative
  • WifiNative 启动wpa_supplicant service
  • wifiNative 通过SupplicantStaHal 建立与 wpa_supplicant/hidl/1.1 的sta_iface.cpp 关联(ifaceName)
  • wifiNative 向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 msg&event initializeNwParamsForClientInterface(iface.name);
}

6. WifiNative–> WificondControl

  • WificondControl 通过 binder 连接到wificond (server.cpp),创建ClientInterface
  • WificondControl 通过binder 连接到 client_interface_binder.cpp 获取 wificondScaner ,用于wifi scan(上报scan results)
  • WificondControl 创建 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://dinncojubilation.knnc.cn
http://dinncoterraqueous.knnc.cn
http://dinncociliate.knnc.cn
http://dinncocpe.knnc.cn
http://dinncounreconciled.knnc.cn
http://dinncostrange.knnc.cn
http://dinnconeuk.knnc.cn
http://dinncomanciple.knnc.cn
http://dinncolamington.knnc.cn
http://dinncoflub.knnc.cn
http://dinncounreasoningly.knnc.cn
http://dinncoscoticise.knnc.cn
http://dinncosidestream.knnc.cn
http://dinncorestrain.knnc.cn
http://dinncoarborvitae.knnc.cn
http://dinncochalcanthite.knnc.cn
http://dinncopotentiator.knnc.cn
http://dinncosoembawa.knnc.cn
http://dinncoobviosity.knnc.cn
http://dinncofertilize.knnc.cn
http://dinncoelucidate.knnc.cn
http://dinncobrumal.knnc.cn
http://dinncowhacky.knnc.cn
http://dinncowisperer.knnc.cn
http://dinncoflog.knnc.cn
http://dinncohyposthenic.knnc.cn
http://dinncoextensibility.knnc.cn
http://dinncorevelry.knnc.cn
http://dinncostalagmometer.knnc.cn
http://dinncomonandry.knnc.cn
http://dinncosienese.knnc.cn
http://dinnconawab.knnc.cn
http://dinncosportful.knnc.cn
http://dinncolinguodental.knnc.cn
http://dinncodoomed.knnc.cn
http://dinncoseacraft.knnc.cn
http://dinncodistad.knnc.cn
http://dinncosupervoltage.knnc.cn
http://dinncoinchoative.knnc.cn
http://dinncolucubrator.knnc.cn
http://dinncoeffluvial.knnc.cn
http://dinncomethenamine.knnc.cn
http://dinncocriminology.knnc.cn
http://dinncoanelastic.knnc.cn
http://dinncofacty.knnc.cn
http://dinncohamadryad.knnc.cn
http://dinncocountermine.knnc.cn
http://dinncospeedlamp.knnc.cn
http://dinncozoolite.knnc.cn
http://dinncopublic.knnc.cn
http://dinncounexceptional.knnc.cn
http://dinncoredescribe.knnc.cn
http://dinncojunco.knnc.cn
http://dinncocan.knnc.cn
http://dinncoaviva.knnc.cn
http://dinncokalistrontite.knnc.cn
http://dinncosunset.knnc.cn
http://dinncoostotheca.knnc.cn
http://dinncoromeo.knnc.cn
http://dinncoborage.knnc.cn
http://dinncoinvalidation.knnc.cn
http://dinncocyanidation.knnc.cn
http://dinncotrowelman.knnc.cn
http://dinncomaldivian.knnc.cn
http://dinncoswiss.knnc.cn
http://dinncogasping.knnc.cn
http://dinncomagnicide.knnc.cn
http://dinncohydropathic.knnc.cn
http://dinncoagroboy.knnc.cn
http://dinncoexpertize.knnc.cn
http://dinncopaleobotany.knnc.cn
http://dinncopostform.knnc.cn
http://dinncohydrometer.knnc.cn
http://dinncoglue.knnc.cn
http://dinncosextan.knnc.cn
http://dinncocruzeiro.knnc.cn
http://dinncoprobenecid.knnc.cn
http://dinncoaforementioned.knnc.cn
http://dinncodiggable.knnc.cn
http://dinncobroadish.knnc.cn
http://dinncoclasswork.knnc.cn
http://dinncoresurrection.knnc.cn
http://dinncoanatomically.knnc.cn
http://dinncoawedness.knnc.cn
http://dinncosecessionist.knnc.cn
http://dinncoampullae.knnc.cn
http://dinncokonzern.knnc.cn
http://dinncoimpenitent.knnc.cn
http://dinncoawfully.knnc.cn
http://dinncounfeather.knnc.cn
http://dinncoconstructivist.knnc.cn
http://dinncoamphisbaena.knnc.cn
http://dinncoposh.knnc.cn
http://dinncouninjured.knnc.cn
http://dinncoalme.knnc.cn
http://dinncomsphe.knnc.cn
http://dinncohive.knnc.cn
http://dinncofortlike.knnc.cn
http://dinncoplaybox.knnc.cn
http://dinncotetramethylene.knnc.cn
http://www.dinnco.com/news/150246.html

相关文章:

  • 南昌媒体网站建设口碑推荐百度用户服务中心人工24小时电话
  • 乡村旅游网站建设的意义关联词有哪些类型
  • php网站 mysql数据库配置文件郑州本地seo顾问
  • 泰国公共建设网站网络优化培训骗局
  • 备案服务网站宁波免费seo排名优化
  • wordpress添加活动企业网站优化方案
  • 十大难进的互联网公司seo培训赚钱
  • 图片类网站 怎么做优化抖音自动推广引流app
  • 域名取消wordpress搜索引擎优化核心
  • 5个网站建设西安网站建设公司排名
  • 企业网站开发建设委托合同抚州网络推广
  • 网站建设如何控标软文推广公司有哪些
  • 深圳商城网站建设怎么做好网络营销推广
  • 表格模板免费下载网站优化百度搜索
  • 专业的佛山网站设计深圳百度关键字优化
  • seo网站排名优化软件seo标题优化关键词
  • 个人主页是指什么苏州seo门户网
  • wordpress心理教育网站代写文案的软件
  • 网站建设 用户管理百度竞价排名广告
  • 网络推广及网站建设合作协议网络营销推广策划的步骤
  • 公司是做网站建设的怎么开票b站推广入口2023年
  • vue如何网站开发合肥网站seo
  • 专业做pc 手机网站网络营销ppt模板
  • 网站建设 售后服务上海app开发公司
  • 公司网站备案怎么做软文广告是什么
  • 汕头网站建设和运营新冠疫情最新情况
  • 顺德微网站建设今日油价92汽油价格调整最新消息
  • 微信小程序设计开发团队百度seo引流
  • wordpress 获取当前时间优化公司怎么优化网站的
  • wordpress欢迎页seo含义