第三部分:Wi 模块的启动(使能)
WirelessSettings 在初始化的时候配置了由 WiEnabler 来处理 Wi 按钮,
private void initToggles() {
mWiEnabler = new WiEnabler(this,
777777777777777777777777777777777 (WiManager) getSystemService(WIFI_SERVICE),
777777777777777777777777777777777 (CheckBoxPreference) ndPreference(KEY_TOGGLE_WIFI));
当用户按下 Wi 按钮后,Android 会调用 WiEnabler 的 onPreferenceChange,再由 WiEnabler
调用 WiManager 的 setWiEnabled 接口函数,通过 AIDL,实际调用的是 WiService 的
setWiEnabled 函数,WiService 接着向自身发送一条 MESSAGE_ENABLE_WIFI 消息,在
处理该消息的代码中做真正的使能工作:首先装载 WIFI 内核模块(该模块的位置硬编码为
"/system/lib/modules/wlan.ko" ), 然后启动 wpa_supplicant ( 配置文件硬编码为
"/data/misc/wi/wpa_supplicant.conf"),再通过 WiStateTracker 来启动 WiMonitor 中的监视
线程。
private boolean setWiEnabledBlocking(boolean enable) {
777 nal int eventualWiState = enable ? WIFI_STATE_ENABLED :WIFI_STATE_DISABLED;
777 updateWiState(enable ? WIFI_STATE_ENABLING : WIFI_STATE_DISABLING);
777 if (enable) {
77777777777 if (!WiNative.loadDriver()) {