WEB开发网
开发学院手机开发Android 开发 Android 移植 wifi 设计原理 阅读

Android 移植 wifi 设计原理

 2010-02-24 05:10:00 来源:WEB开发网   
核心提示:}}4. 连接当用户在 AcessPointDialog 中选择好加密方式和输入密钥之后,再点击连接按钮,Android就会去连接这个 AP,private void handleConnect() {String password = getEnteredPassword();if (!TextUtils.isEmp

}

}

4. 连接

当用户在 AcessPointDialog 中选择好加密方式和输入密钥之后,再点击连接按钮,Android

就会去连接这个 AP。

private void handleConnect() {

String password = getEnteredPassword();

if (!TextUtils.isEmpty(password)) {

mState.setPassword(password);

}

mWifiLayer.connectToNetwork(mState);

}

WifiLayer 会先检测这个 AP 是不是之前被配置过,这个是通过向 wpa_supplicant 发送

LIST_NETWORK 命令并且比较返回值来实现的,

// Need WifiConfiguration for the AP

WifiConfiguration config = findConfiguredNetwork(state);

如果 wpa_supplicant 没有这个 AP 的配置信息, 则会向 wpa_supplicant 发送 ADD_NETWORK

命令来添加该 AP,

if (config == null) {

// Connecting for the first time, need to create it

config = addConfiguration(state,

ADD_CONFIGURATION_ENABLE|ADD_CONFIGURATION_SAVE);

}

ADD_NETWORK 命 令 会 返 回 一 个 ID , WifiLayer 再 用 这 个 返 回 的 ID 作 为 参 数 向

wpa_supplicant 发送 ENABLE_NETWORK 命令,从而让 wpa_supplicant 去连接该 AP。

// Make sure that network is enabled, and disable others

mReenableApsOnNetworkStateChange = true;

if (!mWifiManager.enableNetwork(state.networkId, true)) {

Log.e(TAG, "Could not enable network ID " + state.networkId);

error(R.string.error_connecting);

return false;

}

5. 配置 IP 地址

当 wpa_supplicant 成功连接上 AP 之后,它会向控制通道发送事件通知连接上 AP 了,从而

wifi_wait_for_event 函数会接收到该事件,由此 WifiMonitor 中的 MonitorThread 会被执行来

出来这个事件,

void handleEvent(int event, String remainder) {

case CONNECTED:

handleNetworkStateChange(NetworkInfo.DetailedState.CONNECTED,

remainder);

上一页  1 2 3 4 5  下一页

Tags:Android 移植 wifi

编辑录入:coldstar [复制链接] [打 印]
赞助商链接