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

Android 移植 wifi 设计原理

 2010-02-24 05:10:00 来源:WEB开发网   
核心提示:中的监视,线程,private boolean setWifiEnabledBlocking(boolean enable) {final int eventualWifiState = enable ? WIFI_STATE_ENABLED :WIFI_STATE_DISABLED;updateWifiState(e
中的监视

,

线程。

private boolean setWifiEnabledBlocking(boolean enable) {

final int eventualWifiState = enable ? WIFI_STATE_ENABLED :

WIFI_STATE_DISABLED;

updateWifiState(enable ? WIFI_STATE_ENABLING : WIFI_STATE_DISABLING);

if (enable) {

if (!WifiNative.loadDriver()) {

Log.e(TAG, "Failed to load Wi-Fi driver.");

updateWifiState(WIFI_STATE_UNKNOWN);

return false;

}

if (!WifiNative.startSupplicant()) {

WifiNative.unloadDriver();

Log.e(TAG, "Failed to start supplicant daemon.");

updateWifiState(WIFI_STATE_UNKNOWN);

return false;

}

mWifiStateTracker.startEventLoop();

}

// Success!

persistWifiEnabled(enable);

updateWifiState(eventualWifiState);

return true;

}

当使能成功后,会广播发送 WIFI_STATE_CHANGED_ACTION 这个 Intent 通知外界 WIFI

已 经 成 功 使 能 了 。 WifiEnabler 创 建 的 时 候 就 会 向 Android 注 册 接 收

WIFI_STATE_CHANGED_ACTION,因此它会收到该 Intent,从而开始扫描。

private void handleWifiStateChanged(int wifiState) {

if (wifiState == WIFI_STATE_ENABLED) {

loadConfiguredAccessPoints();

attemptScan();

}

2. 查找 AP

扫描的入口函数是 WifiService 的 startScan,它其实也就是往 wpa_supplicant 发送 SCAN 命

令。

static jboolean android_net_wifi_scanCommand(JNIEnv* env, jobject clazz)

{

jboolean result;

// Ignore any error from setting the scan mode.

// The scan will still work.

(void)doBooleanCommand("DRIVER SCAN-ACTIVE", "OK");

result = doBooleanCommand("SCAN", "OK");

(void)doBooleanCommand("DRIVER SCAN-PASSIVE", "OK");

return result;

上一页  1 2 3 4 5  下一页

Tags:Android 移植 wifi

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