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