WiFi打开流程(详细)
首先,与Wifi相关的类WifiEnabler管理着WiFi打开/关闭/扫描等事项。那么WiFi打开流程必然是从WifiEnable这个类开始的。(由于列出全部方法体会使篇幅较长,故只列出重要部分,但读者可参照类名与方法名找到具体方法实现。)
wifi/WifiEnabler.java:点击wifi开关后
public boolean onSwitchToggled(boolean isChecked) {
if (!mWifiManager.setWifiEnabled(isChecked)) {//private WifiManager mWifiManager
mSwitchWidget.setEnabled(true)
}
WifiManager.java:
public boolean setWifiEnabled(boolean enabled) {
return mService.setWifiEnabled(mContext.getOpPackageName(), enabled);//IWifiManager mService
}
在这里 使用了AIDL接口,BaseWifiService extends IWifiManager.Stub,那么其实调用的是BaseWifiService的setWifiEnabled方法,但是利用多态则调用的是(WifiServiceImpl extends BaseWifiService )WifiServiceImpl的setWifiEnabled方法。
WifiServiceImpl.java:
在这个方法中判断了当下是不是飞行模式、有没有权限等等。
public synchroni