在移动定位、网络分析或 Wi‑Fi 工程中,我们经常需要获取周围 Wi‑Fi 的 BSSID(AP MAC 地址) 与 RSSI(信号强度)。本文将分层解析 Android 系统获取这些信息的全过程,并说明每一层的职责与责任方。
一、应用层(App / SDK)
职责
-
调用系统提供的 API 发起扫描
-
获取扫描结果并解析
BSSID和RSSI -
做权限检查(如定位权限)
主要接口
Android 提供 WifiManager 和 ScanResult:
java
WifiManager wifiManager =
(WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wifiManager.startScan();
List<ScanResult> results = wifiManager.getScanResults();
for (ScanResult result : results) {
String bssid = result.BSSID; // AP MAC 地址
int rssi = result.level; // 信号强度,单位 dBm
}
权限要求
-
Android 8+:必须有
ACCESS_FINE_LOCATION权限 -
系统定位开关必须开启
-
扫描频率受系统限制
责任方:应用开发者,需遵守系统权限与隐私要求。
二、Android Framework 层(系统服务)
职责
-
管理 Wi‑Fi 服务,如
WifiService、WifiScanningService -
调度扫描任务、缓存结果
-
权限验证与结果封装
数据流
App → WifiManager → WifiService → WifiScanningService → WifiNative → HAL
-
ScanResult的BSSID和RSSI由底层提供 -
Framework 不计算 RSSI,仅做权限与结构封装
责任方:Android 系统开发团队(Framework 层)
三、HAL 层(硬件抽象层)
职责
-
为 Framework 提供标准接口
-
转发扫描命令到底层驱动
-
接收驱动返回的扫描结果并返回给 Framework
特点
- 数据结构如:
cpp
struct wifi_scan_result {
mac_addr bssid;
int rssi;
int frequency;
char ssid[32];
};
责任方:设备厂商(Vendor),提供 HAL 实现。
四、Linux 内核层(驱动)
职责
-
控制 Wi‑Fi 模块执行扫描
-
解析接收到的 802.11 帧
-
提取 AP 的 MAC 地址(BSSID) 和信号强度(RSSI)
数据流
Firmware → Wi‑Fi Driver → cfg80211 → nl80211 → HAL
-
RSSI 来自 PHY 层测量
-
BSSID 来自 Beacon 或 Probe Response 帧头
责任方:芯片厂商 / 驱动开发者
五、Firmware 层(芯片固件)
职责
-
控制 RF 模块与基带处理
-
扫描信道并测量信号功率
-
将测量结果传给驱动
特点
-
RSSI 可能经过平滑或校准
-
不同芯片精度略有差异
责任方:芯片厂商(如 Qualcomm、MTK、Broadcom)
六、硬件模组层(物理天线与射频)
职责
-
天线接收无线信号
-
RF 模块放大、下变频
-
ADC 转换为数字信号
-
PHY 层计算 RSSI
关键点
-
BSSID:AP 自身广播的物理 MAC
-
RSSI:接收信号功率,单位 dBm
责任方:芯片和模组制造商
七、总结
整个 Wi‑Fi 扫描与信息获取链路分为六层:
| 层级 | 职责 | 责任方 |
|---|---|---|
| 应用层 | 发起扫描、获取结果、权限管理 | 应用开发者 |
| Framework | 调度扫描、封装结果、权限检查 | Android 系统 |
| HAL | 标准接口转发、数据结构封装 | 设备厂商 |
| Linux 内核 / 驱动 | 控制硬件扫描、解析帧、提取 RSSI/BSSID | 芯片厂商 / 驱动开发者 |
| Firmware | 控制 RF、测量信号、校准 RSSI | 芯片厂商 |
| 硬件 | 接收信号、模拟数字转换、PHY 测量 | 芯片与模组厂商 |
Android 提供的 API 只是访问通道,BSSID 由 AP 广播,RSSI 由硬件测量。Android 只负责封装、权限和接口调用,工程上要注意 RSSI 的波动性和不同芯片间的差异。
维智 Android 定位 SDK是一套面向 Android 移动端应用的简单易用定位服务接口,为开发者提供融合定位能力。通过使用维智定位 SDK,开发者可以在不直接依赖底层 NLP 实现质量的前提下,为应用快速集成 极速、智能、精准、高效 的定位功能。