【问题标题】:How to get the battery level from Kontakt.io beacons using AltBeacon API如何使用 AltBeacon API 从 Kontakt.io 信标获取电池​​电量
【发布时间】:2017-03-01 21:36:35
【问题描述】:

我需要从 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 xamarin.forms ibeacon altbeacon kontakt.io


【解决方案1】:

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

【讨论】:

  • 感谢您的帮助。我已经删除了默认解析器,现在我得到了一个值。该值为 8(长),在 Kontact.IO 应用程序中查看电池声称 93%。 8 是什么意思?!
  • 原始值的范围为 0-255。你已经知道 8 显然意味着 93℅。您将需要更多数据点来得出转换公式。你可能会问 Kontakt.IO。不幸的是,他们的 SDK 是封闭源代码,所以我们无法亲眼看到。
  • 谢谢!你给了我很好的帮助。我将联系 Kontakt.IO 并了解价值的含义。
【解决方案2】:

Kontakt.io 信标中的电池电量是其“scan response packet”的一部分,而不是 iBeacon 结构的一部分,您必须使用CoreBluetooth 才能读取Characteristic 1, Service 5

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    相关资源
    最近更新 更多