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

如何在Android中用AltBeacon库传输指定UID和命名空间的Eddystone Beacon

使用AltBeacon库传输Eddystone-UID Beacon

核心步骤与代码示例

要传输带特定命名空间和UID的Eddystone Beacon,你需要使用BeaconTransmitter类,并正确构建符合Eddystone-UID格式的Beacon对象,具体操作如下:

  1. 配置Eddystone-UID解析器
    首先创建BeaconParser并指定Eddystone-UID的布局规则,这个规则定义了Beacon数据的结构:
BeaconParser eddystoneUidParser = new BeaconParser()
        .setBeaconLayout("s:0-1=feaa,m:2-2=00,p:3-3:-41,i:4-13,i:14-19");

布局字符串说明:

  • s:0-1=feaa:指定Service UUID为0xfeaa(Eddystone的标准UUID)
  • m:2-2=00:标记帧类型为UID(0x00)
  • p:3-3:-41:定义TxPower字段位置(第3字节),参考值为-41dBm
  • i:4-13:命名空间标识符(10字节)
  • i:14-19:实例ID标识符(6字节)
  1. 构建Eddystone-UID Beacon对象
    根据你的需求设置命名空间和实例ID,注意两者的字节长度要求:命名空间必须是10字节(对应20位十六进制字符串),实例ID必须是6字节(对应12位十六进制字符串):
// 替换为你的目标命名空间(10字节)
Identifier namespaceId = Identifier.parse("00112233445566778899");
// 替换为你的目标实例ID(6字节)
Identifier instanceId = Identifier.parse("aabbccddeeff");

Beacon eddystoneBeacon = new Beacon.Builder()
        .setId1(namespaceId)   // 绑定命名空间
        .setId2(instanceId)    // 绑定实例ID
        .setTxPower(-59)       // 设置1米处的RSSI值,可根据实际场景调整
        .build();
  1. 启动Beacon传输
    初始化BeaconTransmitter并启动广播,同时处理启动结果:
BeaconTransmitter transmitter = new BeaconTransmitter(context, eddystoneUidParser);

transmitter.startAdvertising(eddystoneBeacon, new AdvertiseCallback() {
    @Override
    public void onStartSuccess(AdvertiseSettings settingsInEffect) {
        // 传输启动成功的逻辑
    }

    @Override
    public void onStartFailure(int errorCode) {
        // 传输失败的错误处理,比如权限不足、蓝牙未开启等
    }
});

关键注意事项

  • 权限要求:
    • Android 12及以上:需要在Manifest中声明BLUETOOTH_ADVERTISE权限,并动态申请
    • Android 11及以下:需要BLUETOOTH、BLUETOOTH_ADMIN权限,同时动态申请ACCESS_FINE_LOCATION权限
  • 字节长度校验:命名空间和实例ID的字节长度必须严格符合要求,否则会导致构建Beacon对象失败
  • TxPower调整:TxPower值用于接收端计算距离,建议通过实际测试校准该值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 07:10:23