Android4.4.2源码分析之WiFi模块(二)

本文是Android 4.4.2 WiFi模块源码分析的第二部分,主要关注WiFi列表的加载和状态更新。在onResume方法中,通过WiFiEnabler的resume方法管理和更新WiFi状态。当接收到SCAN_RESULT_AVAILABLE_ACTION广播时,会调用updateAccessPoints方法更新WiFi列表。列表中的关键信息包括SSID、level和capabilities。同时,文章还介绍了如何判断WiFi的保护方式以及处理连接状态变化的广播事件。
摘要由CSDN通过智能技术生成

接着上一篇继续对WiFi源码的分析

Android4.4.2源码分析之WiFi模块(一)

onResume方法中

6>,首先是调用WiFiEnabler的resume方法对switch进行管理

接下来注册广播

getActivity().registerReceiver(mReceiver, mFilter);

广播监听的action如下

       //wifi状态改变的action
        mFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
       
       //WiFi扫描到附近可用WiFi时的广播
        mFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
      
       //
        mFilter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION);
        mFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
        mFilter.addAction(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION);
        mFilter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION);
        mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
        mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);

查看WiFiManager发现各action定义如下,以及在监听到对应广播后各处理如下

i>

 /**
     * Broadcast intent action indicating that Wi-Fi has been enabled, disabled,
     * enabling, disabling, or unknown. One extra provides this state as an int.
     * Another extra provides the previous state, if available.
     *
     * @see #EXTRA_WIFI_STATE
     * @see #EXTRA_PREVIOUS_WIFI_STATE
     */
    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
    public static final String WIFI_STATE_CHANGED_ACTION =
        "android.net.wifi.WIFI_STATE_CHANGED";

WIFI_STATE_CHANGED_ACTION:当WiFi被打开、关闭、正在打开、正在关闭或者位置状态即wifi状态发生改变时系统会自动发送该广播,该广播会附带有两个值,一个是int型表示改变后的state,可通过字段EXTRA_WIFI_STATE获取,还有一个是int型的改变前的state(如果有的话)可通过字段EXTRA_PREVIOUS_WIFI_STATE获取

当监听到该广播后会进行如下处理:更新WiFi状态(在WiFiEnbabler中也监听了该广播,用于当WiFi状态改变时对switch进行更新)

 if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
            updateWifiState(intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
                    WifiManager.WIFI_STATE_UNKNOWN));

updateWifiState方法如下

private void updateWifiState(int state) {
        Activity activity = getActivity();
        if (activity != null) {
        //重新加载菜单  ,该方法会调用activity中的onCreateOptionsMenu加载actionbar
         activity.invalidateOptionsMenu();
        }

        switch (state) {
            case WifiManager.WIFI_STATE_ENABLED://打开WiFi
              mScanner.resume();//从下面的方法中可以看到,该方法是用于开启WiFi的扫描,并记录扫描次数
                return; // not break, to avoid the call to pause() below

            case WifiManager.WIFI_STATE_ENABLING://正在打开WiFi
                addMessagePreference(R.string.wifi_starting);
                break;

            case WifiManager.WIFI_STATE_DISABLED://关闭WiFi
              //用户可以在wlan-->高级选项中去设置时是否随时都可以扫描(关闭WiFi后也可以扫描),根据用户的选择,
               //设置在关闭WLAN后显示界面上的文本
              setOffMessage();
                break;
        }

        mLastInfo &
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值