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

ALTEBeacon传递字符串仅显示前两位字符问题排查求助

解决AltBeacon传递字符串仅显示前两个字符的问题

嗨,我来帮你搞定这个问题!你遇到的字符串只显示前两个字符的情况,本质是AltBeacon的标准字段长度限制在搞鬼~

问题根源

AltBeacon的核心ID字段(Id1/Id2/Id3)都有严格的长度限制:

  • Id1是16字节的UUID,用来标识大的分组
  • Id2是2字节(16位整数),最多只能存2个ASCII字符
  • Id3是4字节(32位整数),最多存4个ASCII字符

你应该是把字符串直接塞进了Id2这类短字段里,所以"Paulo"的前两个字节"Pa"被保留,后面的"ulo"直接被截断了。

正确解决方案:用厂商自定义字段传递长字符串

要传递任意长度的字符串,应该用AltBeacon的厂商自定义数据字段,这个字段没有严格的长度限制(只要符合BLE广播包的总长度上限,一般能存几十字节)。

修改你的代码如下:

if (Build.VERSION.SDK_INT >= 21) {
    device.setText("supported");
    String stringToTransmit = "Paulo";
    byte[] stringToTransmitAsAsciiBytes = stringToTransmit.getBytes(StandardCharsets.US_ASCII);
    
    // 构建Beacon实例,用厂商字段存字符串
    Beacon beacon = new Beacon.Builder()
            .setId1("你的UUID") // 替换成你自己的标准UUID(比如"2f234454-cf6d-4a0f-adf2-f4911ba9ffa6")
            .setId2("1") // 可选,填1-65535之间的数值字符串即可
            .setId3("1") // 可选,填1-4294967295之间的数值字符串即可
            .setManufacturer(0x0118) // AltBeacon标准的厂商代码
            .setManufacturerData(stringToTransmitAsAsciiBytes) // 把字符串字节数组放到自定义字段
            .build();
    
    // 启动广播
    BeaconTransmitter transmitter = new BeaconTransmitter(context, new AltBeaconParser());
    transmitter.startAdvertising(beacon);
}

接收端如何获取完整字符串

在接收端的回调里,通过getManufacturerData()拿到字节数组,再转成字符串即可:

@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
    for (Beacon beacon : beacons) {
        byte[] manufacturerData = beacon.getManufacturerData();
        if (manufacturerData != null && manufacturerData.length > 0) {
            String receivedString = new String(manufacturerData, StandardCharsets.US_ASCII);
            // 这里就能拿到完整的"Paulo"了
            Log.d("BeaconDemo", "收到的字符串:" + receivedString);
        }
    }
}

额外提醒

如果一定要用ID字段传递内容,只能把字符串拆分到Id2+Id3里(最多存6个ASCII字符),但这不是AltBeacon的设计初衷,厂商自定义字段才是用来传递自定义数据的正确方式哦~

内容的提问来源于stack exchange,提问作者Paulo Pérez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:59:56