接着上一篇继续对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 &