如何使用AltBeacon API

时间:2017-03-01 21:36:35

标签: xamarin xamarin.forms ibeacon altbeacon kontakt.io

我需要从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?

更新

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

Kontakt.io信标中的电池电量属于他们的" scan response packet",而不是iBeacon结构的一部分,您必须使用CoreBluetooth来阅读Characteristic 1, Service 5

有关其工作原理的快速细分described here,最近推出的Xamarin component使用the same CoreBluetooth approach