Как увеличить период сканирования для устройств BLE в Android?
Я пытался реализовать программу сканирования маяков, и я хочу, чтобы службы BLE для Android вели себя аналогично методу "didRangeBeacons" в iOS, то есть он должен вызываться каждую секунду. Но в андроиде такого метода нет. Но в Android есть метод leScanCallback, который вызывается очень часто с периодом сканирования менее секунды. Таким образом, есть ли способ, с помощью которого я могу реализовать свои функциональные возможности в методе leScanCallback и увеличить его интервал между периодами сканирования до 1 секунды, чтобы он вел себя подобно методу iOS didRangeBeacons.
* Также будет ли плохим программированием постоянно сканировать маяк и увеличивать его интервал сканирования в Android?
заранее спасибо
1 ответ
Важно понимать, что в Android нет встроенной поддержки iBeacon. Android leScanCallback
метод не является эквивалентом iOS didRangeBeacons
метод.
leScanCallback
метод просто возвращает вам вызов каждый раз, когда рекламный пакет с устройства Bluetooth просматривается (устройства с подключаемым битом, установленным в объявлении, получают обратный вызов только при первом обращении к его Mac-адресу, пока вы не остановите и не перезапустите сканирование). Если вы не остановите и не перезапустите сканирование по таймеру, у вас не будет периода сканирования, и вы получите обратные вызовы при поступлении пакетов. Это может быть много раз в секунду.
При написании библиотеки Android iBeacon с открытым исходным кодом мне пришлось с нуля собрать всю функциональность, чтобы сделать didRangeBeaconsInRegion
обратный вызов, который был эквивалентен тому, что в iOS. Для этого библиотека останавливает и перезапускает сканирование примерно раз в секунду и буферизует список всех iBeacon, увиденных в цикле, вызывая только обратный вызов со списком видимых iBeacon в конце цикла. Есть много других сложностей, не обсуждаемых здесь.
Код является бесплатным для просмотра и изменения, поэтому я советую вам сделать это, если вы хотите создать свой собственный.