You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android BLE:ScanResult.getTxPower()与ScanRecord.getTxPowerLevel()的区别

Android BLE中ScanResult.getTxPower()与ScanRecord.getTxPowerLevel()的区别

核心区别与含义

  • ScanRecord.getTxPowerLevel()
    这个是从BLE广播包的**Tx Power AD字段(类型0x0A)**中读取的校准值,是厂商预设的固定值,表示设备在1米距离处的发射功率(单位dBm),比如常见的-20、0、12dBm等。这个值和收发距离无关,只要设备广播包含该字段,每次扫描到的数值都一致。如果设备没广播这个字段,会返回Integer.MIN_VALUE。

  • ScanResult.getTxPower()
    这个方法的设计目标是读取当前接收到的BLE包的发射功率指示,但实际上它的返回值依赖于设备是否在扫描响应包中携带了Tx Power字段。大部分BLE设备只会在广播主包中携带Tx Power,不会在扫描响应里重复发送,所以你测试时经常拿到127(TX_POWER_NOT_PRESENT)是正常情况。如果设备确实在扫描响应里包含了该字段,它返回的也是和ScanRecord同样的厂商校准值,不是实时测量的RSSI。

    补充:这两个方法并非同义词,只是读取的是广播包不同部分的同一类型字段——但绝大多数场景下,只有ScanRecord能拿到有效数值。

与其他系统BLE库的对应关系

  • Windows:对应BluetoothLEAdvertisementReceivedEventArgs.TxPower属性,读取的是广播包中的Tx Power校准值。
  • macOS/iOS:对应CBAdvertisementDataTxPowerLevelKey键值,同样是厂商预设的1米处发射功率。

测试注意点

你遇到的ScanResult.getTxPower()始终返回127的情况,是因为绝大多数BLE外设不会在扫描响应中额外携带Tx Power字段,只在主广播包中包含。所以如果要获取发射功率校准值,优先用ScanRecord.getTxPowerLevel()即可。

内容的提问来源于stack exchange,提问作者Markus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:02:54