android wifi工作流程


Wifi 网卡状态

1.    WIFI_STATE_DISABLED: WIFI网卡不可用

2.    WIFI_STATE_DISABLING: WIFI正在关闭

3.    WIFI_STATE_ENABLED:WIFI网卡可用

4.    WIFI_STATE_ENABLING:WIFI网卡正在打开

5.    WIFI_STATE_UNKNOWN:未知网卡状态

 

WIFI 访问网络需要的权限

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE">

</uses-permission>修改网络状态的权限

<uses-permission

android:name="android.permission.CHANGE_WIFI_STATE">

</uses-permission>修改WIFI状态的权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">

</uses-permission>访问网络权限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE">

</uses-permission>访问WIFI权限

 

WIFI 核心模块

n  WifiService

由SystemServer启动的时候生成的ConnecttivityService创建,负责启动关闭wpa_supplicant,启动和关闭WifiMonitor线程,把命令下发给wpa_supplicant以及跟新WIFI的状态

n  WifiMonitor

  负责从wpa_supplicant接收事件通知

n  Wpa_supplicant

1、读取配置文件

2、初始化配置参数,驱动函数

3、让驱动scan当前所有的bssid

4、检查扫描的参数是否和用户设置的想否

5、如果相符,通知驱动进行权限 认证操作

6、连上AP

n  Wifi驱动模块

厂商提供的source,主要进行load firmware和kernel的wireless进行通信

n  Wifi电源管理模块

主要控制硬件的GPIO和上下电,让CPU和Wifi模组之间通过sdio接口通信

 

Wifi工作步骤

n  Wifi模块初期化

n  Wifi启动

n  查找热点(AP)

n  配置AP

n  配置AP参数

n  Wifi连接

n  IP地址配置

 

Wifi模块代码总结

n  Wifi Application代码

packages/apps/Settings/src/com/android/settings/wifi

n  Wifi Framework

frameworks/base/wifi/java/android/net/wifi

frameworks/base/services/java/com/android/server

n  Wifi JNI

frameworks/base/core/jni/android_net_wifi_Wifi.cpp

n  Wifi Hardware

hardware/libhardware_legacy/wifi/wifi.c

n  Wifi tool

external/wpa_supplicant

n  Wifi kernel

net/wireless     drivers/wlan_sd8688       arch/arm/mach-pxa/wlan_pm.c

 

Wifi模块的初始化:

在 SystemServer 启动的时候,会生成一个ConnectivityService 的实例, ConnectivityService 的构造函数会创建WifiService,WifiStateTracker 会创建WifiMonitor 接收来自底层的事件,WifiService 和WifiMonitor 是整个模块的核心。WifiService 负责启动关闭wpa_supplicant、启动关闭WifiMonitor 监视线程和把命令下发给wpa_supplicant,而WifiMonitor 则负责从wpa_supplicant 接收事件通知。

 

Wifi模块的启动:

WirelessSettings 在初始化的时候配置了由WifiEnabler 来处理Wifi 按钮,

当用户按下Wifi 按钮后,Android 会调用WifiEnabler 的onPreferenceChange,再由WifiEnabler调用WifiManager 的setWifiEnabled 接口函数,通过AIDL,实际调用的是WifiService 的setWifiEnabled 函数,WifiService 接着向自身发送一条MESSAGE_ENABLE_WIFI 消息,在处理该消息的代码中做真正的使能工作:首先装载WIFI 内核模块(该模块的位置硬编码为"/system/lib/modules/wlan.ko" ), 然后启动wpa_supplicant ( 配置文件硬编码为"/data/misc/wifi/wpa_supplicant.conf"),再通过WifiStateTracker 来启动WifiMonitor 中的监视线程。

 

查找热点(AP):

(Wifi开启)中讲到Wifi模块开启后会对外发送WIFI_STATE_CHANGED_ACTION。WifiLayer中注册了Action的Receiver。当WifiLayer收到此Action后开始scan的流程,具体如下

当wpa_supplicant 处理完SCAN 命令后,它会向控制通道发送事件通知扫描完成,从wifi_wait_for_event 函数会接收到该事件,由此WifiMonitor 中的MonitorThread 会被执行来出来这个事件:

配置 AP 参数:

当用户在 WifiSettings 界面上选择了一个AP 后,会显示配置AP 参数的一个对话框:

 

Wifi连接:

 

 

IP地址的配置:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AndroidWiFi连接流程图主要包括以下步骤: 1. 打开WiFi:用户进入设置界面,打开设备的WiFi开关,使设备开始搜索可用的WiFi网络。 2. 搜索和扫描:Android设备开始搜索周围的WiFi网络,扫描到的网络信息将会显示在WiFi设置列表中,包括网络名称(SSID)、信号强度等。 3. 用户选择网络:用户根据列表中显示的网络信息,选择要连接的WiFi网络。 4. 请求连接:Android设备通过向选择的WiFi网络发送请求连接的请求,包括认证信息和其他必要的参数。 5. 连接认证:WiFi网络收到连接请求后,会进行身份验证,包括密码验证、MAC地址过滤等。如果认证通过,网络将发送认可的连接响应。 6. IP地址获取:一旦连接成功,Android设备将向WiFi网络请求分配一个IP地址,以便在网络上进行通信。 7. 地址分配:WiFi网络会为设备分配一个合法的IP地址,并将该信息通过DHCP(动态主机配置协议)返回给设备。 8. 连接成功:设备接收到IP地址和其他网络配置信息后,与WiFi网络建立连接成功。 9. 数据传输:现在,设备可以通过WiFi网络进行数据传输,包括浏览互联网、收发电子邮件等。 10. 断开连接:当用户关闭设备的WiFi开关或者设备离开WiFi网络的范围时,设备会与WiFi网络断开连接。 总的来说,AndroidWiFi连接流程图涵盖了搜索、选择、连接认证、IP地址获取、数据传输等多个环节,确保设备可以顺利地连接和使用WiFi网络。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值