WiFi 休眠

       frameworks\opt\net\wifi\service\java\com\android\server\wifi\WifiServiceImpl.java

      WifiServiceImpl.java

    private void registerForBroadcasts() {
        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;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值