При мониторинге для радиомаяков, передающих 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, зависит от вашего варианта использования.
Итак, если я правильно понял, регион, который был обнаружен первым, этот регион будет использоваться в обратном вызове didEnterRegion? Или можно сделать didEnterRegion для первого региона, а другой для второго региона? так что, если, например, обнаружена вторая область, выполняются действия didEnterRegion (region2), и если первая область обнаружена, выполняются действия didEnterRegion (region1)? – brasay
Вы получаете другой обратный вызов по региону, если обнаружен маяковый радиосигнал, соответствующий определению региона. – davidgyoung
Таким образом, можно различать различные области, используя, например, переключатель, где условие является переключателем (region.getId1()) и выполнять разные действия в зависимости от того, в какой из определенных областей пользователь находится? – brasay