如何使用 AltBeacon API 从 Kontakt.io 信标获取电池​​电量

How to get the battery level from Kontakt.io beacons using AltBeacon API

我需要从 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,我不知道这个值是什么意思。

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

Kontakt.io 信标中的电池电量是其“scan response packet", not part of the iBeacon structure, you'll have to use CoreBluetooth to read Characteristic 1, Service 5.

的一部分

其工作原理的快速分解也是 described here, and the recently launched Xamarin component uses the same CoreBluetooth approach