1

我需要从 kontakt.io 信标获取电池​​电量。我已将布局设置如下,当我读取RangingBeaconsInRegion中的信标时, DataFields为空。

我期待我可以从 Kontakt.io 文档中描述的最后一位读取电池电量。

这是我当前的代码:

private BeaconManager InitializeBeaconManager()
{
    BeaconManager bm = BeaconManager.GetInstanceForApplication(Xamarin.Forms.Forms.Context);

    var iBeaconParser = new BeaconParser();
    iBeaconParser.SetBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25");
    bm.BeaconParsers.Add(iBeaconParser);

    _rangeNotifier.DidRangeBeaconsInRegionComplete += RangingBeaconsInRegion;

    bm.Bind((IBeaconConsumer)Xamarin.Forms.Forms.Context);

    return bm;
}

void RangingBeaconsInRegion(object sender, RangeEventArgs e)
{
    if (e.Beacons.Count > 0)
    {
        var beacon = e.Beacons.FirstOrDefault();

        var data = beacon.DataFields.FirstOrDefault();
        // here DataFields is empty!

    }
}

我正在使用 Xamarin Forms,这是 Android 版本的代码。

这可能吗?还是我需要使用 Kontakt.io API?

更新

在应用新布局之前,我已经删除了所有解析器,并且能够读取数据字段。但是,我得到一个值8,我不知道这个值是什么意思。

4

2 回答 2

2

我不赞成 Xamarin 的语法,但在添加自定义的信标解析器之前尝试删除所有现有的信标解析器。我怀疑内置的 iBeacon 解析器仍然处于活动状态并且它首先匹配。

于 2017-03-01T23:39:59.527 回答
0

Kontakt.io 信标中的电池电量是其“扫描响应数据包”的一部分,而不是 iBeacon 结构的一部分,您必须使用CoreBluetooth来读取Characteristic 1, Service 5

此处还简要介绍了其工作原理,最近推出的Xamarin 组件使用相同的 CoreBluetooth 方法

于 2017-03-22T09:19:18.863 回答