Мониторинг маяков Eddystone

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

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

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


person brasay    schedule 30.09.2015    source источник


Ответы (1)


При мониторинге маяков, передающих 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, также имеет значение null, поскольку маяки Eddystone-UID имеют только два идентификатора. Код начинает мониторинг каждого из этих регионов в последних двух строках.

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

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

person davidgyoung    schedule 30.09.2015
comment
Итак, если я правильно понимаю, регион, который будет обнаружен первым, будет использоваться в обратном вызове didEnterRegion? Или можно сделать didEnterRegion для первого региона И один для второго региона? чтобы, например, при обнаружении второго региона выполнялись действия didEnterRegion(region2), а при обнаружении первого региона выполнялись действия didEnterRegion(region1)? - person brasay; 30.09.2015
comment
Вы получаете разные обратные вызовы для каждого региона, если обнаружен маяк, соответствующий определению региона. - person davidgyoung; 30.09.2015
comment
Таким образом, можно различать разные регионы, используя, например, переключатель, где условием является переключатель (region.getId1()) и выполнять разные действия в зависимости от того, в каком из определенных регионов находится пользователь? - person brasay; 30.09.2015
comment
Да, вы можете сделать именно это. - person davidgyoung; 30.09.2015