欢迎来到天天文库
浏览记录
ID:18804124
大小:58.00 KB
页数:22页
时间:2018-09-25
《android4.0 wifi模块详细解析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、android4.0wifi模块详细解析这几天闲着没事,我就随便拿起Android源码看看。以下要讲的是在ICS中wifi初始化的一些流程。涉及的文件有:SystemServer.javaWifiSettings.javaWifiEnabler.javaWifiManager.javaWifiService.javaWifiStateMachine.javaandroid_net_wifi_wifi.cppwifi.c首先从SystemServer.java开始,它做了3个动作:1.添加注册Conne
2、ctivityService连接服务,它跟所有手机的无线通信都有联系,包括wifi,蓝牙,2g网络,3g网络等connectivity=newConnectivityService(context,networkManagement,networkStats,networkPolicy);ServiceManager.addService(Context.CONNECTIVITY_SERVICE,connectivity);2.管理开机wifi开启与否的问题wifi.checkAndStartWifi
3、();publicvoidcheckAndStartWifi(){mAirplaneModeOn.set(isAirplaneModeOn());mPersistWifiState.set(getPersistedWifiState());booleanwifiEnabled=shouldWifiBeEnabled()
4、
5、testAndClearWifiSavedState();setWifiEnabled(wifiEnabled);mWifiWatchdogStateMachine=WifiWatc
6、hdogStateMachine.makeWifiWatchdogStateMachine(mContext);}3.添加注册wifi的核心服务wifiservicewifi=newWifiService(context);ServiceManager.addService(Context.WIFI_SERVICE,wifi);好了,机器启动的时候动作就这些。要开启wifi,还需要人在设置界面进行开启。·下面将一步步介绍wifi是怎样开启起来的进入wifi设置界面,相关文件WifiSettings.j
7、ava开启Wifi的组件是一个CompoundButton,跟它关联起来的是一个WifiEnabler.java类,它是在WifiSettings里面初始化的publicvoidonActivityCreated(BundlesavedInstanceState){mWifiEnabler=newWifiEnabler(activity,actionBarSwitch);}当用户点击wifi的开启按钮时候,会触发WifiEnabler里面的onCheckedChanged函数publicvoidonC
8、heckedChanged(CompoundButtonbuttonView,booleanisChecked){if(mWifiManager.setWifiEnabled(isChecked)){mSwitch.setEnabled(false);}else{Toast.makeText(mContext,R.string.wifi_error,Toast.LENGTH_SHORT).show();}在onCheckedChanged函数里面,调用了WifiManager的setWifiEnabl
9、ed方法publicbooleansetWifiEnabled(booleanenabled){try{returnmService.setWifiEnabled(enabled);}catch(RemoteExceptione){returnfalse;}}它返回的是mService.setWifiEnabled(enabled),这里的mService是WifiService的代理,所以它实际调用的是wifiService里面的setWifiEnabled函数publicclassWifiServ
10、iceextendsIWifiManager.Stub,我们可以看到WifiService继承一个接口IWifiManager.Stub,凡是继承了像这种形式写法的接口服务,都可以进行远程调用,这就是Android内部的aidl通信。接下来进入wifiservicepublicsynchronizedbooleansetWifiEnabled(booleanenable){mWifiStateMachine.setWifiEnabled(enable);
此文档下载收益归作者所有