使用Android Beacon库检测树莓派iBeacon失败如何解决?
问题根源
你配置的iBeacon解析规则的匹配偏移量错误,是无法识别树莓派iBeacon广播的核心原因。
修正方案
1. 修正BeaconParser布局字符串
你当前使用的布局规则为:
beaconManager.BeaconParsers.Add(new BeaconParser().SetBeaconLayout("m:0-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
其中匹配段m:0-3=0215的起始偏移不符合iBeacon的帧结构:iBeacon广播的制造商数据前2字节为苹果公司标识0x4C00,后续第2-3字节才是iBeacon的特征码0x0215,因此需要将匹配偏移改为2-3,修正后的代码如下:
beaconManager.BeaconParsers.Add(new BeaconParser().SetBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
2. 确认解析器注册时机
必须在调用StartRangingBeacons、StartMonitoringBeacons等扫描启动方法之前,将上述iBeacon解析器添加到BeaconParsers列表中,扫描启动后新增的解析规则不会生效。
3. 排查解析器覆盖问题
如果你的代码中调用过beaconManager.BeaconParsers.Clear()清空默认解析器列表,需要确保iBeacon解析器是在清空操作之后添加的。未清空列表时,默认自带的AltBeacon解析器不会影响iBeacon解析,库会遍历所有已注册的解析器依次尝试匹配。
你看到的日志中Was expecting be ac的报错,是库匹配默认AltBeacon解析器时输出的正常失败提示,不影响iBeacon的匹配逻辑,修正解析规则后即可正常识别。
内容的提问来源于stack exchange,提问作者davidjons
相关产品推荐
相关产品推荐

