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

在移动定位、网络分析或 Wi‑Fi 工程中,我们经常需要获取周围 Wi‑Fi 的 BSSID(AP MAC 地址)RSSI(信号强度)。本文将分层解析 Android 系统获取这些信息的全过程,并说明每一层的职责与责任方。


一、应用层(App / SDK)

职责

  • 调用系统提供的 API 发起扫描

  • 获取扫描结果并解析 BSSIDRSSI

  • 做权限检查(如定位权限)

主要接口

Android 提供 WifiManagerScanResult

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 服务,如 WifiServiceWifiScanningService

  • 调度扫描任务、缓存结果

  • 权限验证与结果封装

数据流

App → WifiManager → WifiService → WifiScanningService → WifiNative → HAL

  • ScanResultBSSIDRSSI 由底层提供

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

相关推荐
独行soc6 分钟前
2026年渗透测试面试题总结-18(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
王码码203536 分钟前
Flutter for OpenHarmony 实战之基础组件:第二十七篇 BottomSheet — 动态底部弹窗与底部栏菜单
android·flutter·harmonyos
2501_9151063236 分钟前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview
vistaup1 小时前
OKHTTP 默认构建包含 android 4.4 的TLS 1.2 以及设备时间不对兼容
android·okhttp
常利兵1 小时前
ButterKnife在Android 35 + Gradle 8.+环境下的适配困境与现代化迁移指南
android
撩得Android一次心动1 小时前
Android LiveData 全面解析:使用Java构建响应式UI【源码篇】
android·java·android jetpack·livedata
熊猫钓鱼>_>1 小时前
移动端开发技术选型报告:三足鼎立时代的开发者指南(2026年2月)
android·人工智能·ios·app·鸿蒙·cpu·移动端
Rainman博11 小时前
WMS-窗口relayout&FinishDrawing
android
baidu_2474386113 小时前
Android ViewModel定时任务
android·开发语言·javascript
有位神秘人14 小时前
Android中Notification的使用详解
android·java·javascript