5

Próbowałem zaimplementować program skanowania beacon i chcę, aby usługi android BLE zachowywały się podobnie do metody iOS "didRangeBeacons", tzn. Powinny być wywoływane co sekundę. Ale w Androidzie nie ma takiej metody. Ale w Androidzie istnieje metoda "leScanCallback", która jest wywoływana bardzo często z czasem skanowania krótszym niż sekunda. Czy istnieje sposób, w jaki mogę wdrożyć moją funkcjonalność w metodzie leScanCallback i wydłużyć jej okres skanowania do 1 sekundy, aby zachował się podobnie do metody "didRangeBeacons" systemu iOS.Jak zwiększyć czas skanowania urządzeń BLE w systemie Android?

* Czy złe będzie także ciągłe skanowanie radiolatarni i zwiększenie częstotliwości skanowania w systemie Android?

Dzięki z góry

Odpowiedz

8

ważne jest, aby zrozumieć, że nie ma natywne wsparcie iBeacon w Androidzie. Metoda Android leScanCallback nie jest wcale odpowiednikiem metody iOS didRangeBeacons.

Metoda daje po prostu wywołanie zwrotne za każdym razem, gdy widzi się pakiet reklamowy z urządzenia Bluetooth (urządzenia z bitem ustawionym w reklamie otrzymują tylko wywołanie zwrotne przy pierwszym wyświetleniu adresu Mac, dopóki nie przestaniesz i zrestartuj skanowanie). Jeśli nie zatrzymasz i nie uruchomisz ponownie skanowania na liczniku czasu, nie ma okresu skanowania, a otrzymasz wywołania zwrotne, gdy pakiety zostaną dostarczone. Może to być wiele razy na sekundę.

Podczas pisania open source Android iBeacon Library, musiałem zbudować całą funkcjonalność od podstaw, aby wywołanie zwrotne didRangeBeaconsInRegion, które było równoważne z tym, co jest w iOS. Aby to zrobić, biblioteka zatrzymuje się i restartuje skanowanie mniej więcej raz na sekundę i buforuje listę wszystkich iBeaconów widocznych w cyklu, wywołując tylko wywołanie zwrotne z listą widocznych iBeaconów na końcu cyklu. Istnieje wiele innych problemów, o których tutaj nie mówimy.

The code is free do sprawdzania i modyfikowania, dlatego zachęcam do zrobienia tego, jeśli chcesz wykonać własną.

+0

Dzięki David. Sprawdzałem kod napisany przez ciebie. To naprawdę fajna praca. A teraz mam logikę skanowania. :) – HeadOnn

+0

Jeśli chcemy skanować tylko wtedy, gdy aplikacja znajduje się na pierwszym planie, a nie w tle. Co będzie lepsze? Skanowanie ciągłe lub skanowanie w interwale (powiedzmy 1 sekundę) –

+1

Należy skanować z przerwą. Wiele urządzeń z Androidem ma warstwę sprzętową bluetooth, która zapewnia tylko jedno wywołanie zwrotne wykrywania na wykrycie urządzenia sprzętowego na skanowanie. Aby uzyskać drugie wywołanie zwrotne dla tego samego urządzenia sprzętowego, wymagane jest zatrzymanie i ponowne uruchomienie. – davidgyoung

Powiązane problemy