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

AltBeacon中dataFields仅存单个Long值?多值传输问题求助

问题

尝试在Beacon的数据字段中传输两个Long类型值(纬度和经度),但仅第一个值能成功传输。具体尝试情况:

  • 将两者放入dataFields:
    .setDataFields(listOf(latitude.toLong(), longitude.toLong()))
    
    结果仅得到[53](仅纬度值);
  • 将纬度放入dataFields、经度放入extraDataFields:
    .setDataFields(listOf(latitude.toLong())) .setExtraDataFields(listOf(longitude.toLong()))
    
    此时纬度设置正常,但extraDataFields仍为空。

疑问:dataFields是否存在仅能存储单个值的限制?

解答

dataFields本身没有只能存储单个值的限制,问题根源在于Beacon广播帧的字节长度限制以及你使用的Beacon格式的规范约束:

  1. 标准Beacon格式的空间限制
    比如常见的iBeacon格式,其Manufacturer Data字段总长度固定为25字节,仅包含UUID、Major、Minor、TxPower这几个固定字段,没有额外空间存储自定义的Long型数据。你看到的[53]是Long值(8字节)被截断后的结果——因为剩余空间不足,只能保存部分字节。

  2. extraDataFields的生效条件
    extraDataFields仅在支持扩展数据的Beacon格式(如AltBeacon、自定义Beacon格式)中有效。如果是iBeacon这类固定格式,广播帧里根本没有对应extraDataFields的存储空间,所以设置后也不会生效。

解决建议

  • 换用支持自定义数据的Beacon格式:比如AltBeacon,它专门预留了自定义dataFields的空间,每个字段可设置为1-8字节,只要总长度不超过BLE广播帧的最大限制(通常31字节),就能存储多个Long值。
  • 压缩经纬度数据:如果必须使用iBeacon格式,可以把经纬度转换为更小的数值类型(比如将经纬度乘以1e5转为4字节的int),再尝试塞进预留的扩展空间(注意:部分标准iBeacon设备不支持扩展Manufacturer Data)。
  • 检查硬件限制:部分廉价Beacon设备本身存在硬件层面的自定义数据长度限制,即使格式支持,也会自动截断超出的内容,建议查看设备文档确认参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 22:11:02