2015-09-30 8 views
0

У меня вопрос о мониторинге нескольких регионов с помощью маяков Eddystone с помощью библиотеки AltBeacon.Контрольные маяки Eddystone

Скажем, например, у меня есть 3 маяка, и каждый из маяков назначается другой области, а регионы определяются на основе значения экземпляра маяков, т.е. («region1», null, «InstanceValueOfBeacon», null) и у меня есть другое действие для каждого didEnterRegion.

Теперь, когда я размещаю все маяки рядом друг с другом. Как приложение ответит? Будет ли он продолжать переключение между разными регионами, поскольку найдены многочисленные маяки? Выполняет ли это действие маяка, который впервые обнаружен? Или как это работает?

ответ

0

При мониторинге для радиомаяков, передающих Eddystone-UID, регионы должны быть установлены следующим образом:

Identifier eddystoneNamespaceId1 = Identifier.parse("0x00000000000000000001"); 
Identifier eddystoneNamespaceId2 = Identifier.parse("0x00000000000000000002"); 

Region eddystoneUidRegion1 = new Region("eddystoneUidRegion1", 
    eddystoneNamespaceId1, null, null); 
Region eddystoneUidRegion2 = new Region("eddystoneUidRegion1", 
    eddystoneNamespaceId2, null, null); 

beaconManager.setRangeNotifier(this); 
beaconManager.startMonitoringBeaconsInRegion(eddystoneUidRegion1); 
beaconManager.startMonitoringBeaconsInRegion(eddystoneUidRegion2); 

В этом примере две различные области определены, каждый из которых имеет 10-байтовый отличается Eddystone-UID идентификатор пространства имен , и нулевой идентификатор экземпляра Eddystone-UID, чтобы он соответствовал всем маякам с этим пространством имен. Последний параметр, переданный в конструктор Region, также является нулевым, поскольку маяки Eddystone-UID имеют только два идентификатора. Код запускает мониторинг для каждой из этих областей в двух последних строках.

В первый раз, когда обнаружен какой-либо маяковый радиосигнал, соответствующий первому региону (например, один с первым идентификатором пространства имен), будет вызван обратный вызов didEnterRegion, передающий ссылку на объект eddystoneUidRegion1. Эквивалентный обратный вызов также произойдет, если обнаружен какой-либо маяк, соответствующий второму региону. Вы можете определить, какой из них обнаружен, исследуя содержимое объекта Region, переданного на обратный вызов. Существует другой обратный вызов для didExitRegion, когда все маяки, соответствующие контролируемой области, исчезают.

Как работают API мониторинга. Существуют также Ranging API, которые дают вам обратный вызов примерно на 1 Гц со списком всех видимых маяков, которые соответствуют Region. Независимо от того, используете ли вы API-интерфейс мониторинга или API-интерфейсы Ranging, зависит от вашего варианта использования.

+0

Итак, если я правильно понял, регион, который был обнаружен первым, этот регион будет использоваться в обратном вызове didEnterRegion? Или можно сделать didEnterRegion для первого региона, а другой для второго региона? так что, если, например, обнаружена вторая область, выполняются действия didEnterRegion (region2), и если первая область обнаружена, выполняются действия didEnterRegion (region1)? – brasay

+0

Вы получаете другой обратный вызов по региону, если обнаружен маяковый радиосигнал, соответствующий определению региона. – davidgyoung

+0

Таким образом, можно различать различные области, используя, например, переключатель, где условие является переключателем (region.getId1()) и выполнять разные действия в зависимости от того, в какой из определенных областей пользователь находится? – brasay