android wifi工作流程
2019独角兽企业重金招聘Python工程师标准>>>
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地址的配置:
转载于:https://my.oschina.net/u/994235/blog/112931
android wifi工作流程相关推荐
- Android -- Wifi启动流程分析
Android -- Wifi启动流程分析 Android网络各个模式中,Wifi应该是目前最常用的一种网络方式了:下面就简单介绍下Android中Wifi的启动流程. 当我在Setting菜单里点击 ...
- 一篇文章看明白 Android PackageManagerService 工作流程
Android - PackageMangerService 分析 相关系列 一篇文章看明白 Android 系统启动时都干了什么 一篇文章了解相见恨晚的 Android Binder 进程间通讯机制 ...
- Android之wifi工作流程
Android Wifi的工作流程 一.WIFI工作相关部分 Wifi 网卡状态 1. WIFI_STATE_DISABLED:WIFI网卡不可用 2. WIFI_STATE_DISABL ...
- Android WiFi —softAP流程分析
Android WiFi - Ap功能实现与源码分析 0. 前言 wifiAp的ip WifiAp的config分析 2.1 默认的config 2.2 修改wifiAp的config配置流程 开启/ ...
- android wifi连接流程,(九十三) Android O 连接WiFi AP流程梳理续——保存网络-Go语言中文社区...
前言: 之前在(五十五)Android O 连接WiFi AP流程梳理 梳理连接流程梳理到SupplicantStaNetworkHal 然后没梳理的下去,现在继续梳理下. 之前梳理的时序图 1.流程 ...
- android如何开发ui服务,Android UI-对Activity工作流程的理解(一)
概述 在android studio创建一个新项目的时候,或者初学者在刚踏入android开发的时候,都会在首先创建一个MainActivity.根据一般的理解,Activity的就相当于一个界面的入 ...
- android设备怎么支持8021x,android WiFi ASSOC_REJECT 流程跟踪
Android设备在于AP关联时,如果AP返回关联拒绝帧,Android设别会把AP加入黑名单中. 黑名单中的设备将会在扫描时,延时一段时间放在后面处理. 代码以及log基于SDM450, Andro ...
- android wifi wps 流程,android中WiFi wps连接方式
Android 个人热点 wps方式连接流程 android手机开启个人热点时,可以选择WPS连接方式 个人热点端 连接端 当个人热点端选择按钮时,连接端只需要点击WPS按钮即可连接:当个人热点端选择 ...
- android wifi驱动流程,高通Android wifi驱动移植-SDIO
环境用的是android2.3系统,wifi是BCM4329,接口是SDIO,Android4.0在步骤上略有不同. 1.首先了解SDIO的一些相关知识: SDIO有两端,其中一端是HOST端,另一端 ...
最新文章
- 美团和拼多多是如何拿下长尾市场的
- 《JAVA编程那点事儿》读书笔记(二)——类和对象
- 计算机在线考试系统的参考文献,基于JSP的在线考试系统
- 磁盘df看还有剩余空间,但是创建文件时报错,提示磁盘已经满问题解决
- 【今日CV 计算机视觉论文速览】Fri, 22 Feb 2019
- linux 创建文件夹快捷方式
- MySql实战篇:写一个简单的存储过程,完成订单定时任务
- python定位地理位置_python 实现ip定位地址
- R语言数据异常值处理
- Android CPU架构之ARM和X86
- 2022 东北四省赛 VP记录/补题
- 360签名工具 linux,360apk签名工具下载
- Hive beeline常用操作
- 【Matlab系列】MATLAB中显示输出数据的四种方式
- Android设置状态栏字体深色,Android实现修改状态栏背景、字体和图标颜色的方法...
- 华为S2700以及S5700系列交换机 配置(详细)
- OA无纸化政府办公原笔迹电子签名解决方案
- 微信小程序用户盒子、宫格列表(CSS)
- 这200道java大厂面试题全部掌握,“面试”想去哪就去哪
- JAVA|编写西游记人物类
热门文章
- bipush java,Java Opcodes.BIPUSH屬性代碼示例
- iis php 数据库乱码,如何解决php插入数据乱码问题
- myeclipse10.1破解方法
- oracle having用法
- 9适应之力加多少攻击_剑盾铠之孤岛DLC新增内容大全! 宝可梦史上第一款DLC到底香不香(含试玩视频)...
- sublime搭建python开发环境_使用sublime搭建python开发环境
- 蚁剑特征性信息修改简单过WAF
- redis集群的三种模式
- 微服务架构---幂等机制
- Vue学习(vuex)-学习笔记