Android Q-wifi启动流程(一)

9 篇文章 4 订阅
7 篇文章 2 订阅

Android Q WiFi 启动流程分析
    1、WiFi 启动流程简介
    2、WiFi 启动流程应用层分析
    3、WiFi 启动流程服务层分析
        3.1 WifiController 分析
        3.2 WifiController 启动
    4、ClientModeImpl 状态机分析
    5、WifiConnectivityManager WiFi 网络连接管理类

1、WiFi 启动流程简介
    用户可以通过systemUi和设置里的WiFi开关打开WiFi,这时候会调用到WiFi framework的相关接口,继而再继续往下启用具体的硬件完成WiFi启动流程
2、WiFi 启动流程应用层分析
    在Android Setting 中,使用WifiEnabler 来控制WiFi 的开关操作,WifiEnabler 实现了OnSwitchChangeListener接口,当用户点击WiFi的开关按钮,
    就会回调到WifiEnabler onSwitchToggled 方法;在onSwitchToggled 方法调用WifiManager 的setWifiEnabled 方法来实现WiFi 的开关。
    onSwitchToggled源码:
     @Override
        public boolean onSwitchToggled(boolean isChecked) {
            //Do nothing if called as a result of a state machine event
            if (mStateMachineEvent) {
                return true;
            }
            // Show toast message if Wi-Fi is not allowed in airplane mode
            if (isChecked && !WirelessUtils.isRadioAllowed(mContext, Settings.Global.RADIO_WIFI)) {
                Toast.makeText(mContext, R.string.wifi_in_airplane_mode, Toast.LENGTH_SHORT).show();
                // Reset switch to off. No infinite check/listener loop.
                mSwitchWidget.setChecked(false);
                return false;
            }

            if (isChecked) {
                mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_WIFI_ON);
            } else {
                // Log if user was connected at the time of switching off.
                mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_WIFI_OFF,
                        mConnected.get());
            }
            if (!mWifiManager.setWifiEnabled(isChecked)) {
                // Error
                mSwitchWidget.setEnabled(true);
                Toast.makeText(mContext, R.string.wifi_error, Toast.LENGTH_SHORT).show();
            }
            return true;
        }
    2.1 WifiManager 是WiFi 子系统的管理类,WiFi 子系统绝大部分功能都是通过WifiManager 来实现的,WifiManager 是Wifiserver 的代理类,通
        过AIDL 来调用Wifiserver 相应的函数。setWifiEnabled 函数实现如下:setWifiEnabled 调用mService setWifiEnabled 方法,mService 是
        IWifiManager 的实现,是Android wifiserver 的代理类,最终是调到WifiServiceImpl 的setWifiEnabled 方法
        setWifiEnabled源码:
            @Deprecated
            public boolean setWifiEnabled(boolean enabled) {
                try {
                    return mService.setWifiEnabled(mContext.getOpPackageName(), enabled);
                } catch (RemoteException e) {
                    throw e.rethrowFromSystemServer();
                }
            }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值