Как получить уровень заряда батареи от маяков Kontakt.io с помощью AltBeacon API

Мне нужно получить уровень заряда батареи от маяков kontakt.io. Я установил макет, как показано ниже, и DataFields пусты, когда я читаю маяки в RangingBeaconsInRegion.

Я ожидал, что смогу прочитать уровень заряда батареи с последнего бита, как описано в документации 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.

Это возможно? или мне нужно использовать API Kontakt.io?

ОБНОВЛЕНИЕ

Я удалил все синтаксические анализаторы, прежде чем применять новый макет, и я могу читать поля данных. Однако я получаю значение 8, и понятия не имею, что это значение означает.


person gjfonte    schedule 01.03.2017    source источник
comment
Возможный дубликат Как получить уровень заряда батареи Kontakt ibeacons   -  person SushiHangover    schedule 02.03.2017
comment
Я видел похожие вопросы, но проблема, с которой я столкнулся, заключалась в том, что я не очистил весь BeaconParser перед применением нового макета. См. ответ @davidgyoung   -  person gjfonte    schedule 03.03.2017


Ответы (2)


Я не уверен в синтаксисе Xamarin, но попробуйте удалить все существующие синтаксические анализаторы маяков, прежде чем добавлять свой собственный. Я подозреваю, что встроенный синтаксический анализатор iBeacon все еще активен, и он сначала сопоставляется.

person davidgyoung    schedule 01.03.2017
comment
Спасибо за вашу помощь. Я удалил парсеры по умолчанию и теперь получаю значение. Значение равно 8 (длинное), и, глядя в приложение Kontact.IO, батарея показывает 93%. Что значит 8?! - person gjfonte; 02.03.2017
comment
Необработанное значение будет находиться в диапазоне от 0 до 255. Вы узнали, что 8, по-видимому, означает 93℅. Вам понадобится еще несколько точек данных, чтобы придумать формулу конверсии. Вы можете спросить Kontakt.IO. к сожалению, их SDK с закрытым исходным кодом, поэтому мы не можем увидеть это сами. - person davidgyoung; 03.03.2017
comment
Благодарю вас! Вы оказали мне хорошую помощь. Я свяжусь с Kontakt.IO и узнаю, что означает значение. - person gjfonte; 03.03.2017

Уровень заряда батареи в маяках Kontakt.io является частью их «пакета ответа на сканирование", не являющийся частью структуры iBeacon, вам придется использовать CoreBluetooth прочитать Характеристика 1, Услуга 5.

Краткое описание того, как это работает, также описано здесь. недавно запущенный компонент Xamarin использует такой же подход CoreBluetooth.

person mrtnclzd    schedule 22.03.2017