安卓系统在开机时会读取关机时wifi和热点的打开关闭状态,以此来开启操作开启关闭wifi,热点
- 第一步启动wifiservice 代码位置frameworks\opt\net\wifi\service\java\com\android\server\wifi
public WifiService(Context context) { super(context); mImpl = new WifiServiceImpl(context); } @Override public void onStart() { Log.i(TAG, "Registering " + Context.WIFI_SERVICE); publishBinderService(Context.WIFI_SERVICE, mImpl); } @Override public void onBootPhase(int phase) { if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) { mImpl.checkAndStartWifi(); //接收到服务启动信息会执行相关操作 } }
-
接着执行到WifiServiceImpl 中的checkAndStartWifi方法同样在frameworks\opt\net\wifi\service\java\com\android\server\wifi 目录
/**
* Check if Wi-Fi needs to be enabled and start
* if needed
*
* This function is used only at boot time
*/
public void checkAndStartWifi() {
/* Check if wi-fi needs to be enabled */
boolean wifiEnabled = mSettingsStore.isWifiToggleEnabled(); //判断wifi是否开启
Slog.i(TAG, "WifiService starting up with Wi-Fi " +
(wifiEnabled ? "enabled" : "disabled"));
registerForScanModeChange();//开启扫描
mContext.registerReceiver(
new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (mSettingsStore.handleAirplaneModeToggled()) {
mWifiController.sendMessage(CMD_AIRPLANE_TOGGLED);
}
}
},
new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED));
// Adding optimizations of only receiving broadcasts when wifi is enabled
// can result in race conditions when apps toggle wifi in the background
// without active user involvement. Always receive broadcasts.
registerForBroadcasts(); //初始化一些广播
registerForPackageOrUserRemoval();
mInIdleMode = mPowerManager.isDeviceIdleMode();
mWifiController.start();
// If we are already disabled (could be due to airplane mode), avoid changing persist
// state here
// MStar Android Patch Begin
//这里就是判断是否要重新开启wifi和热点了
if (wifiEnabled) {
setWifiEnabled(wifiEnabled);
} else {
// If wifi not start self, test if softap need start or not
if (mSettingsStore.isWifiApToggleEnabled()) {
Slog.d(TAG, "Wifi ap start with enabled");
setWifiApEnabled(null, true);
} else {
Slog.d(TAG, "Wifi ap start with disabled");
}
}
// MStar Android Patch End
mWifiWatchdogStateMachine = WifiWatchdogStateMachine.
makeWifiWatchdogStateMachine(mContext, mWifiStateMachine.getMessenger());
}
这里要注意的是这里的开关wifi热点直接使用的是当前类中的方法,此代码是mstar 6.0方案代码不同方案可能有所不同 。