系列文章目录

第一章 国内下载AOSP最新源码的方法
第二章 下载AOSP WiFi相关的代码
第三章 将源码导入Android Studio(无需编译idegen)


文章目录

  • 系列文章目录
  • 前言
  • 一、WiFi是什么?
  • 二、WiFi系统架构
    • 1. 概述
    • 2. 应用框架
    • 3. Wi-Fi 服务
    • 4. Wi-Fi HAL
  • 三、WiFi面向应用提供的API
    • 1. WLAN 扫描
    • 2. WLAN 直连(对等连接或 P2P)
    • 3. WLAN 感知
    • 4. 通过 RTT 确定 Wi-Fi 位置信息
  • 四、WiFi硬件相关的知识
    • 1. WiFi频段和信道
    • 2. WiFi网络协议栈分层
    • 3. WiFi芯片相关
  • 总结

前言

本篇介绍一下Android Wi-Fi系统架构,提供给应用使用Wi-Fi功能的API,以及一些硬件和无线电相关常识。


一、WiFi是什么?

WI-FI(Wireless Fidelity),是一种可以将个人电脑、手持设备等终端以无线方式互相连接的技术,由澳洲政府的研究机构CSIRO在20世纪90年代发明的,发明人是John O’Sullivan,被媒体称为”Wi-Fi之父“。 WI-FI是一个无线网路通信技术的品牌,由Wi-Fi联盟所持有,组成部分包括基本服务单元、分配系统、接入点、扩展服务单元和关口等。目的是改善基于IEEE 802.11标准的无线网路产品之间的互通性。Wi-Fi的样式有很多类型,有无线的卡,还有连接电脑的等等。
知乎Wi-Fi介绍

在无线局域网WLAN发明之前,人们要想通过网络进行联络和通信,必须先用物理线缆-铜绞线组建一个电子运行的通路,为了提高效率和速度,后来又发明了光纤。当网络发展到一定规模后,人们又发现,这种有线网络无论组建、拆装还是在原有基础上进行重新布局和改建,都非常困难,且成本和代价也非常高,于是WLAN的组网方式应运而生。 无线局域网络英文全名:Wireless Local Area Networks;简写为:WLAN。它是相当便利的数据传输系统,它利用射频(Radio Frequency; RF)的技术,使用电磁波,取代旧式碍手碍脚的双绞铜线(Coaxial)所构成的局域网络,在空中进行通信连接,使得无线局域网络能利用简单的存取架构让用户透过它,达到“信息随身化、便利走天下”的理想境界。
知乎无线局域网介绍

记住一点,WI-FI是一个无线网路通信技术的品牌,由Wi-Fi联盟所持有。在中国大陆地区销售的具有无线连接功能的设备上要遵守中国通信管理局的认证要求,不允许出现Wi-Fi商标,所以大陆手机都是显示WLAN。

二、WiFi系统架构

AOSP > 开发 > 连接性: https://source.android.google.cn/devices/tech/connect/wifi-overview?hl=zh-cn

1. 概述

Android 提供默认 Android 框架实现,其中包括对各种 WLAN 协议和模式的支持,这些协议和模式包括:

WLAN 基础架构 (STA)
网络共享模式或仅限本地模式下的 WLAN 热点 (Soft AP)
WLAN 直连(P2P)
WLAN 感知 (NAN)
WLAN RTT (IEEE 802.11mc FTM)
使用 Wi-Fi 服务的应用通过 Binder 直接与各种 Wi-Fi 服务进行通信。Wi-Fi 服务在系统服务中运行,并通过 HIDL 与 HAL 进行通信。下图显示了 Android Wi-Fi 堆栈的常规结构。

2. 应用框架

应用代码位于应用框架级别,它使用各种 android.net.wifi API 与 Wi-Fi 框架和硬件进行交互。此代码在内部通过 Binder IPC 机制调用 WLAN 进程。

3. Wi-Fi 服务

Wi-Fi 服务在系统服务中运行,这类服务位于 frameworks/opt/net/wifi 中。Wi-Fi 服务通过 HIDL 与 Wi-Fi HAL 进行通信。

WLAN 服务有很多种:

WLAN 服务:用于控制 WLAN 基础架构模式(包括 STA 和 AP)的主要机制。
WLAN 点对点服务:管理 WLAN 直连模式。
WLAN 感知服务:管理 WLAN 感知模式。
Wi-Fi RTT 服务:管理 IEEE 802.11mc FTM 功能。
此外,Wi-Fi 框架还包含一个独立的 wificond 进程,该进程位于 system/connectivity/wificond 中。wificond 进程通过标准的 nl80211 命令与 Wi-Fi 驱动程序进行通信。

4. Wi-Fi HAL

Wi-Fi 框架具有三个 Wi-Fi HAL 表面,分别由三个不同的 HIDL 软件包表示:供应商 HAL、客户端 HAL 和 Hostapd HAL。

如需详细了解各种 HAL 的实现,请参阅 Wi-Fi HAL。

三、WiFi面向应用提供的API

Android 开发者 > 文档 > 指南 > WLAN:https://developer.android.google.cn/guide/topics/connectivity/companion-device-pairing?hl=zh-cn

从 Android 10 开始,Wi-Fi 基础架构引入两个全新 API 表面:适用于互联网连接的 Wi-Fi 建议 API 和适用于对等连接的 Wi-Fi 网络请求 API。

1. WLAN 扫描

扫描流程分为三步:

  1. 为 SCAN_RESULTS_AVAILABLE_ACTION 注册一个广播监听器,系统会在完成扫描请求时调用此监听器,提供其成功/失败状态。对于搭载 Android 10(API 级别 29)及更高版本的设备,系统将针对平台或其他应用在设备上执行的所有完整 WLAN 扫描发送此广播。应用可以使用广播被动监听设备上所有扫描的完成情况,无需发出自己的扫描。
  2. 使用 WifiManager.startScan() 请求扫描。请务必检查方法的返回状态,因为调用可能因以下任一原因失败:
    - 由于短时间扫描过多,扫描请求可能遭到节流。
    - 设备处于空闲状态,扫描已停用。
    - WLAN 硬件报告扫描失败。
  3. 使用 WifiManager.getScanResults() 获取扫描结果。系统返回的扫描结果为最近更新的结果,但如果当前扫描尚未完成或成功,可能会返回以前扫描的结果。也就是说,如果在收到成功的 SCAN_RESULTS_AVAILABLE_ACTION 广播前调用此方法,您可能会获得较旧的扫描结果。

2. WLAN 直连(对等连接或 P2P)

使用 WLAN 直连 (P2P) 技术,可以让具备相应硬件的 Android 4.0(API 级别 14)或更高版本设备在没有中间接入点的情况下,通过 WLAN 进行直接互联。使用这些 API,您可以实现支持 WLAN P2P 的设备间相互发现和连接,从而获得比蓝牙连接更远距离的高速连接通信效果。对于多人游戏或照片共享等需要在用户之间共享数据的应用而言,这一技术非常有用。

WLAN P2P API 包含以下主要部分:
- 支持您发现、请求,以及连接到对等设备的方法(在 WifiP2pManager 类中定义)。
- 支持您获知 WifiP2pManager 方法调用成功与否的侦听器。调用 WifiP2pManager 方法时,每个方法均可收到作为参数传入的特定侦听器。
- 通知您 WLAN P2P 框架检测到的特定事件(例如连接断开或新发现对等设备)的 Intent。

通常,您可以一起使用 API 的这三个主要组件。例如,您可以为针对 discoverPeers() 的调用提供 WifiP2pManager.ActionListener,这样您便可以通过 ActionListener.onSuccess() 和 ActionListener.onFailure() 方法来接收通知。如果 discoverPeers() 方法发现对等设备列表已经更改,则还将广播 WIFI_P2P_PEERS_CHANGED_ACTION Intent。

3. WLAN 感知

WLAN 感知功能使搭载 Android 8.0(API 级别 26)及更高版本的设备能够发现彼此并直接进行连接,它们之间无需任何其他类型的连接。WLAN 感知也称为“邻近感知网络”(NAN)。

WLAN 感知网络的工作原理是与邻近设备组建集群,如果设备是某个区域的第一个设备,则创建一个新集群。此集群行为适用于整个设备,由 WLAN 感知系统服务管理;应用无法控制集群行为。应用使用 WLAN 感知 API 与 WLAN 感知系统服务通信,后者管理设备上的 WLAN 感知硬件。

应用可通过 WLAN 感知 API 执行以下操作:

  • 发现其他设备:此 API 具有查找其他附近设备的机制。此过程会在一台设备发布一项或多项可发现服务时启动。然后,当设备订阅一项或多项服务并进入发布者的 WLAN 范围时,订阅者会收到一条告知已发现匹配发布者的通知。在订阅者发现发布者后,订阅者可以发送短消息或与发现的设备建立网络连接。设备可以既是发布者又是订阅者。
  • 创建网络连接:两台设备发现彼此后,可以创建没有接入点的双向 WLAN 感知网络连接。

与蓝牙连接相比,WLAN 感知网络连接支持的覆盖范围更广,支持的吞吐率更高。这些类型的连接适用于在用户之间共享大量数据的应用,例如照片共享应用。

4. 通过 RTT 确定 Wi-Fi 位置信息

您可以利用 Wi-Fi RTT(往返时间)API 提供的 Wi-Fi 位置功能测量距附近支持 RTT 的 Wi-Fi 接入点和 Wi-Fi 感知对等设备的距离。

如果您测量与三个或更多接入点的距离,可以使用多点定位算法来预估与这些测量值最相符的设备位置。结果通常可以精确到 1 至 2 米。

凭借这种精准度,您可以开发基于精确位置的服务,例如室内导航、无歧义语音控制(例如,“打开这盏灯”)以及基于位置的信息(例如,“此产品是否有特别优惠?”)。

请求发出设备无需连接到接入点即可通过 Wi-Fi RTT 测量距离。为了保护隐私,只有发出请求的设备能够确定距接入点的距离,接入点没有此类信息。前台应用执行 Wi-Fi RTT 操作不受限制,但后台应用执行此类操作时会受限。

Wi-Fi RTT 和相关精确时间测量 (FTM) 功能根据 IEEE 802.11mc 标准指定。Wi-Fi RTT 需要 FTM 提供的精确时间测量,因为前者通过测量数据包在设备之间往返所需的时间,并将该时间乘以光速来计算两个设备之间的距离。

四、WiFi硬件相关的知识

1. WiFi频段和信道

无线频谱是一种有限资源,每个国家在军用和民用无线电频段有所差异,但民用无线电频段大体上遵循国际电信联盟定义的ISM频段。ISM频段 是什么,有什么用呢?

ISM(工业、科学、医疗)频段为国际电信联盟(ITU)《无线电规则》定义的指定无线电频段。这些频段是为电信之外的其他射频用途挪出的频段。因此, ISM频段虽然理论上可用于电信用途,但使用ISM频段的电信设备必须能够承受来自其他射频及微波技术的干扰,如来自微波炉、射频加热及其他可能生成电磁干扰(EMI)的设备的干扰。虽然国际电信联盟已确定了指定频段,但各个国家所规定的ISM频段并不统一。ISM频段的最初目的并非用于通信,但是现在很多短距离、低功耗、免许可(或免许可容错)通信系统均在该频段内运行。除通信之外,ISM频段的最常见用途为工业和家庭用感应加热,工业和家庭用微波加热,以及透热疗法、高温疗法和射频/微波消融等医疗用射频及微波加热。此外,由于ISM频段可随时使用,而且针对该频段下的频率存在一些低价的无线集成电路,因此最近开发的某些雷达系统也使用ISM频段,尤其2.4GH ISM频段。ISM频段的最常见日常用途为WiFi、蓝牙、Zigbee、无线电话、RFID及NFC等低功耗及短距离通信。在美国,由于大多数WiFi和蓝牙通信以及最近越来越普及的5GHz WiFi系统都使用ISM频段,因此很多人对该频段都非常熟悉。此外,还有许多常用RFID和NFC系统使用13.553MHz ~13.567MHz ISM频段内的13.56MHz频率,而且还有许多信用卡、安全接入、人员识别及无线支付系统也使用此类技术。

目前WI-FI使用下面两个频段:

  • 2.4GHz
  • 5GHz

每个频道又按照一定的带宽划分为若干信道。

  • 2.4G WIFI共有14个信道,工作频率范围是2.4G-2.4835Ghz,不过在国内,只应用了13个信道。其中北美区域应用了11个信道(1-11);欧洲和我国等应用了13个信道(1-13),日本应用了14个信道(1-14)。
    2.4G WiFi的每一个信道的频宽是22Mhz,中心频点间隔是5Mhz。其中20M属于有效带宽,剩余2M属于隔离保护带宽。
    从信道的图例可以看到,WIFI相邻的信道之间是存在频率交叠的,也正是因为这个,2.4G WIFI整个频段只有1、6、11这三个频率是互不干扰的。
  • 5G WIFI的信道比较多,工作频率范围是5.15G-5.85Ghz。
    5G WIFI早期在国内只开放了5.8Ghz左右的频率,所以一些早期的5G WIFI也只支持149之后的信道。不过现在中国开放了部分其余的5G WIFI信道,可以使用的无线信道也变得更多了。
  • 2.4G WIFI和5G WIFI的区别。
    2.4G WIFI的工作频率低,绕射能力强,所以这个频段的干扰信号更多,使得2.4G WIFI的下载速度也变得很慢。
    而5G WIFI由于工作频率高,使用的频宽大,所以下载速度快。但是这个频段的信号绕射能力差,而且穿墙衰减非常大,所以它比较适合近距离的、在同一个房间内的覆盖。

Wi-Fi信号的“频段”和“信道”有何区别?

2. WiFi网络协议栈分层

  • L1:STA跟AP关联上就表明L1(物理层)连接成功
  • L2:STA跟AP接入认证成功就表明L2(数据链路层)连接成功
  • L3:STA通过DHCP从AP成功获取IP租约/DNS服务器列表就表明L3(网络层)连接成功

L1 对应wpa_supplicant里面的关联;
L2对应wpa_supplicant里面的四次握手(对于加密热点,OPEN认证的关联上就算连上L2了);
L3对应IpClient DHCP成功。

3. WiFi芯片相关

  • 当前手机WiFi芯片厂商主要有高通/博通/MTK/海思,基本上都是蓝牙/GPS/Wi-Fi三合一芯片。芯片上运行一个厂商提供的固件系统,通过接口跟厂商提供的wlan驱动通信。固件是二进制形式提供,wlan驱动是以源码方式提供。
  • 当前大多数旗舰机都支持双频Wi-Fi,也就是硬件接口有两个wlan0和wlan1,天线2x2,可以同时一个连2.4G热点一个连5G热点,也可以一个连Wi-Fi,另一个工作在SoftAp模式共享Wi-Fi网络。

总结

以上就是今天要讲的内容,本文简单介绍了Android WiFI的一些基础知识,由于Wi-Fi整个功能涉及面非常广也非常复杂,很多东西这里一笔带过了。最后希望能帮到大家,觉得对你有帮助的话可以点个赞或关注一下。

第四章 Android WiFi基础知识相关推荐

  1. (Java高级教程)第四章必备前端基础知识-第二节1:CSS概述和选择器

    文章目录 一:CSS概述 (1)概述 (2)语法规范 (3)CSS引入方式 二:选择器 (1)基础选择器 ①:标签选择器 ②:类选择器 ③:id选择器 ④:通配符选择器 总结 (2)复合选择器 ①:后 ...

  2. 计算机基础知识第四章测试,计算机基础知识测试题第四章

    第四章 电子表格Excel 一.单项选择题 1.利用"文件"菜单打开Excel 2000的文件,一次可以打开多个不连续的文件,方法是先单击一个文件名,然后按住( )键,再单击其他文 ...

  3. 软考高级-系统架构师-第四章系统开发基础知识

    本篇博文目录: 一.软件开发方法 1.软件开发生命周期 (1) 软件定义 (2) 软件开发 (3) 软件运行与维护 2.软件开发模型 3.敏捷方法 (1) 敏捷方法的特点 (2) 敏捷方法核心思想 ( ...

  4. 第四章 程序设计语言基础知识

    一. 程序语言的基本概念 1.低级语言与高级语言 1)低级语言:汇编 2)高级语言: 常见的有Java.C.C++.PHP.Pyhton.Delphi 等. 2.编译形式:汇编.解释.编译. 3.程序 ...

  5. 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第三章 Wi-Fi基础知识

    首先感谢各位兄弟姐妹们的耐心等待.本书预计在3月中旬上市发售.从今天开始,我将在博客中连载此书的一些内容.注意,此处连载的是未经出版社编辑的原始稿件,所以样子会有些非专业. 注意,如下是本章目录,本文 ...

  6. Android 系统 wifi基础知识

    第3章 Wi-Fi基础知识 本章所涉及的源代码文件名及位置 ·wireless.h external/ kernel-headers/ original/ linux/ wireless.h ·dri ...

  7. 2018-2019-2-20175225 实验四《Android开发基础》实验报告

    一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:张元瑞 学号:20175225 指导教师:娄嘉鹏 实验日期:2019年5月14日 实验时间:13:45 - 21:00 实验序号:实验 ...

  8. 《软件需求分析(第二版)》第 1 章——软件需求基础知识 重点部分总结

    文章目录 前言 一.单选题 二.填空题 三.判断题 四.简答题 总结 前言 软件需求分析就是把软件计划期间建立的软件可行性分析求精和细化,分析各种可能的解法,并且分配给各个软件元素.需求分析是软件定义 ...

  9. 计算机的指令合成为,第二章计算机操作基础知识doc

    第二章计算机操作基础知识doc (29页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 23.9 积分 第二章  计算机操作基础知识第一节  计算机基础知识 ...

最新文章

  1. 清华硕士眼中的2021届算法岗秋招
  2. Leetcode 201. 数字范围按位与 解题思路及C++实现
  3. IDE之VS:Visual Studio2017版本安装图文教程之详细攻略
  4. C++ TypeId简介与使用
  5. 34.rust宏.txt
  6. NgRx createSelector 工具函数的三个类型参数
  7. 国际人工智能算法与应用研讨会(WASA 2018)参会笔记
  8. jquery 循环_jquery实现无限循环滚动
  9. Session监听器
  10. MyBatis的学习总结:调用存储过程【参考】
  11. [置顶] J2EE (八) 策略模式+装饰模式+反射(java)
  12. 华为云API Explorer开发者生态平台正式上线
  13. java链表实现二叉树_Java 实现链表、二叉树的一些问题
  14. Pidgin 新QQ插件:pidgin-lwqq
  15. 【三维激光扫描】第四章:点云数据处理
  16. WinISO5.3的注册码吧
  17. 生猪价格matlab,2447教务处.doc
  18. 淘宝数据分析实战:热销美食爬取和分析
  19. 【命令】Java调用Windows运行命令打开\关闭软键盘
  20. 一文看懂苹果WWDC20:iOS 14更好玩,可Intel要哭瞎了

热门文章

  1. 【渝粤题库】陕西师范大学292281中央银行学Ⅰ作业(高起专)
  2. Python实现考试网题目答案解析脚本(网络爬虫)
  3. M×N扫描序列图像拼接、大视场图像拼接、全景图像拼接、2D网格拼图方法、累计误差消除(显微图像/航拍图像等)
  4. H5 调用android原生相机代码分析
  5. 脑成像坐标系: MNI + Talairach
  6. “坚持,自有万水千山。”kkgj66
  7. Vue丝滑滚动组件封装
  8. 计算机用户怎么配置漫游,AD用户设置配置漫游配置文件到服务器
  9. 关于豌豆荚更新软件很慢的问题
  10. python报错及解决办法汇总