frameworks\opt\net\wifi\service\java\com\android\server\wifi\WifiServiceImpl.java
WifiServiceImpl.java
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_SCREEN_ON);
intentFilter.addAction(Intent.ACTION_USER_PRESENT);
intentFilter.addAction(Intent.ACTION_SCREEN_OFF); //灭屏时的广播
intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);// 电池变化的广播
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
intentFilter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);
intentFilter.addAction(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED);
intentFilter.addAction(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED);
mContext.registerReceiver(mReceiver, intentFilter);
}
接受到广播后会在WifiController.java (frameworks\opt\net\wifi\service\java\com\android\server\wifi\WifiController.java)
做相应处理:
case CMD_SCREEN_OFF: // 灭屏时
mScreenOff = true;
if (!shouldWifiStayAwake(mPluggedType)) {
//判断WLAN当前策略需要休眠,则继续判断当前WLAN链接状态,若已连接OK即connected状态时,延迟15分钟休眠,否则立即休眠
if (mNetworkInfo.getDetailedState() ==
NetworkInfo.DetailedState.CONNECTED) {
if (DBG) Slog.d(TAG, "set idle timer: " + mIdleMillis + " ms");
mAlarmManager.set(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + mIdleMillis/*15分钟*/, mIdleIntent);
} else {
sendMessage(CMD_DEVICE_IDLE);
}
}
break;
case CMD_DEVICE_IDLE:
mDeviceIdle = true;
///M: @{
mWifiStateMachine.setDeviceIdle(mDeviceIdle);
///@}
updateBatteryWorkSource();
break;
case CMD_BATTERY_CHANGED: //电池变
//此时若当前处于黑屏、之前状态需要保持WLAN Awake、且当前状态需要WLAN休眠时,则延迟15分钟休眠
int pluggedType = msg.arg1;
if (DBG) Slog.d(TAG, "battery changed pluggedType: " + pluggedType);
if (mScreenOff && shouldWifiStayAwake(mPluggedType) &&
!shouldWifiStayAwake(pluggedType)) {
long triggerTime = System.currentTimeMillis() + mIdleMillis;
if (DBG) Slog.d(TAG, "set idle timer for " + mIdleMillis + "ms");
mAlarmManager.set(AlarmManager.RTC_WAKEUP, triggerTime, mIdleIntent);
}
mPluggedType = pluggedType;
break;