如何从安卓系统中获取扫描到的 Wi‑Fi 的 MAC 地址和 RSSI?

在移动定位、网络分析或 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 实现质量的前提下,为应用快速集成 极速、智能、精准、高效 的定位功能。

相关推荐
zhangfeng11336 小时前
com.apple.quarantine 并不是乱码,而是 macOS Gatekeeper 给下载文件自动打上的“隔离属性
macos·策略模式
甘晴void11 小时前
我给 Magpie 做了个 macOS 桌宠:106 段动画,请求一多就亮灯
macos·electron·开源·deepseek·桌面宠物·magpie
donecoding12 小时前
Apple 芯片 Mac 的终端为什么还在跑 Intel?从 tmux 查起
macos
拥小抱13 小时前
Compose 知识点
android
文章永久免费只为良心13 小时前
Web应用安全与防护_第三章_日志文件包含_从一道 CTFshow 题目讲透「日志投毒型 LFI → RCE」:原理、时序陷阱与全变种攻防手册
android·网络安全·渗透测试·漏洞危害·漏洞描述·日志投毒·红队指南
AIsoft_868914 小时前
学术讲座录音如何整理?录音APP可行吗
android·iphone
Patrick在香港16 小时前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
DevLoom_17 小时前
macOS 27 升级后 Time Capsule 无法备份?AFP 协议废弃后的完整解决方案与备份迁移教程
macos·时间机器·macos27·macos 27备份·macos实用技巧
金海星科技18 小时前
船舶交通管理中心的人工智能值守:从“听、说、读、写“看人机协同
人工智能·macos·xcode
海雅达手持终端PDA18 小时前
工业手持终端的“去手机化”演进:看海雅达如何以“同轴扫摄”终结工程妥协,重塑工业PDA新范式
android·物联网·智能手机·硬件工程·能源·制造·iot