Основные / второстепенные iBeacon не обнаруживаются, если они не указаны в настройках региона. - PullRequest
1 голос
/ 05 марта 2020

Вопрос, с которым я борюсь, довольно прост - я знаю uuids iBeacons, которые я использую, но основные / второстепенные параметры не заданы заранее, то есть они могут динамически изменяться. Чего я хочу добиться, так это иметь возможность получать текущие значения мажор / минор, когда BeaconManager вызывает методы MonitorNotifier. По какой-то причине он не проходит мажор / минор в MonitorNotifier, если Region был создан только с использованием uuids, например, так:

val region = Region(uuid.toString(), Identifier.fromUuid(uuid));

Я говорил с разработчиком iOS, который работает с iBeacon через собственные iOS API-интерфейсы, и он говорит, что поведение на iOS точно такое же - основные / второстепенные не предоставляются посредством мониторинга, если только он не указывает точные значения для поиска.

Major / незначительный может быть обнаружен путем ранжирования, но есть причины, по которым я хочу продолжать использовать мониторинг (не вдаваясь в детали - гораздо проще работать с методами didEnter, didExit и didDetermineStateForRegion).

Могу ли я что-то упустить? 1014 *

1 Ответ

1 голос
/ 05 марта 2020

Ваше описание того, как работают API-интерфейсы мониторинга маяков, является точным. Он одинаков как для iOS CoreLocation, так и для библиотеки маяков Android.

Я - тот, кто разработал этот API для библиотеки маяков Android. Это работает так, потому что я хотел, чтобы было легко создавать кроссплатформенные приложения, поэтому я сделал это так же, как iOS.

Причина, по которой iOS работает таким образом, заключается в том, что Apple смоделировала его на своих ранее существовавший API Geofence Region, который также сообщает вам, когда вы входили или выходили, но не дает вам более подробной информации об особенностях, вызывающих вход или выход.

Можно, конечно, утверждать, будет ли другой API лучше , К сожалению, при использовании SDK вы должны принять API как есть. Альтернатива - построить свой собственный.

Если вы действительно хотите обратный вызов события для определенного c маяка обнаруженного / маяка больше не обнаруживаемого события, вы можете легко построить его поверх API ранжирования. Просто отследите список всех видимых маяков, и, когда новый будет найден, вызовите событие didStertDetectingBeacon. Затем, если пройдет 10 секунд, не видя его в обратном вызове диапазона, запустите обратный вызов didStopDetectingBeacon.

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