IBeacon: обнаружение нескольких маяков в фоновом режиме

В рамках моего проекта мне нужно развернуть большое количество маяков в большом городе, таком как Сидней или Мельбурн. Когда пользователь проходит мимо одного из этих маяков, мое приложение должно выполнить определенное действие. Я планирую сохранить UUID одинаковым для всех маяков в моем парке, иметь диапазон от 1 до 20 основных значений в зависимости от местоположения города и разные второстепенные значения для каждого маяка.

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

Для тестирования я настроил свой маяк со следующими значениями - UUID - ABCD1234-DCBA-4321-5555-666677778888 major - 1 minor - 1

И мой текущий код определения региона выглядит так: Region region = new Region ("backgroundRegion1", Identifier.parse ("ABCD1234-DCBA-4321-5555-666677778888"), Identifier.parse ("1"), Identifier.parse (" 1 "));

Вместо этого я хочу, чтобы он был обнаружен чем-то вроде этого (что я пробовал и, похоже, не работает) - Region region = new Region ("backgroundRegion1", Identifier.parse ("ABCD1234-DCBA-4321-5555-666677778888"), ноль ноль);

Учитывая, что у меня будет огромное количество маяков, я просто хочу избежать копирования и вставки одной и той же строки кода.


person Dibzmania    schedule 21.10.2016    source источник
comment
Извините, я думал, что вы пометили iOS из-за iBeacon, но теперь я заметил, что вы этого не сделали. Боюсь, что не знаю об Android   -  person Paulw11    schedule 21.10.2016
comment
У меня есть два маяка, совместимых с iBeacon, с которыми я пытаюсь работать с моим Android-приложением. Я вставил код, который использую, и он очень похож на тот, который вы предложили.   -  person Dibzmania    schedule 21.10.2016
comment
Да, я уверен, что нечто подобное возможно.   -  person Paulw11    schedule 21.10.2016


Ответы (1)


Я работаю над решением с аналогичной реализацией маяка (один UUID, много основных / второстепенных). У меня есть несколько возможных предложений:

  1. Вы можете сделать что-то вроде этого Как я могу получить данные маяка (UUID, Major, Minor) в didEnterRegion в библиотеке altbeacon?
  2. Вы можете использовать идентификатор региона («backgroundRegion1» в вашем примере) в обратном вызове didEnterRegion () для разделения маяков. Это предполагает, что идентификатор региона достаточно уникален, чтобы правильно запускать поведение приложения.

Несколько вещей, на которые следует обратить внимание

  1. didEnterRegion (), кажется, вызывается несколько раз, если пользователь одновременно находится в зоне действия нескольких маяков.
  2. didExitRegion () вызывается только в том случае, если пользователь находится вне диапазона ВСЕХ маяков
  3. Решение для определения дальности в приведенной выше ссылке вызовет обратный вызов, пока пользователь находится в зоне действия этого маяка, поэтому вам нужно будет выполнить собственную фильтрацию.

Лично я больше всего полагаюсь на решение Дэвида по ссылке выше

person Matt Yoder    schedule 21.10.2016
comment
Спасибо, @ Мэтт-Йодер. Это то, что я собирался предложить. - person davidgyoung; 21.10.2016
comment
Привет, stackoverflow.com/users/5505153/matt-yoder, мой вопрос остается частично без ответа (я не ставил вопрос достаточно внятный). - person Dibzmania; 24.10.2016
comment
Привет, stackoverflow.com/users/5505153/matt-yoder, к сожалению, мой вопрос все еще остается без ответа или, возможно, я ответил не понимаю вашего решения. - person Dibzmania; 24.10.2016
comment
@Dibzmania, что осталось без ответа? В конечном итоге я думаю, что вам действительно нужно определить только один регион в вашем коде (с идентификатором региона и UUID). Тогда решение ранжирования, определенное Дэвидом, будет работать для вас, чтобы вы могли анализировать ваши разные маяки по их основным / второстепенным. - person Matt Yoder; 25.10.2016
comment
Можете ли вы опубликовать свой код didEnter / Exit / Range. @davidgyoung - может ли он определить область с нулевым значением как мажор / минор? - person Matt Yoder; 25.10.2016
comment
Да, он может определить область с нулевым мажорным и минорным. Пример был в вопросе: region = new Region("backgroundRegion1", Identifier.parse("ABCD1234-DCBA-4321-5555-666677778888"), null, null); - person davidgyoung; 25.10.2016
comment
Хорошо - просто интересно, приведет ли это к тому, что его код перестанет возвращать события обнаружения - person Matt Yoder; 26.10.2016
comment
Привет, ребята, я наконец смог вставить код и добиться желаемого результата. Как предложил Мэтт, как только я получил обратный вызов EnterRegion, я привязался к экземпляру BeaconManager и к обратному вызову, подключенному к службе, начал ранжирование для маяков и получил основные / второстепенные значения. Спасибо за помощь. Отмечу как ответ - person Dibzmania; 27.10.2016