Tworzenie usług w tle dla Bluetooth low energy na Androida

Background :

Idealnie chciałbym, aby moje urządzenie z Androidem skanowało urządzenia Bluetooth Low Energy cały czas i możliwość uruchamiania aplikacji, gdy pojawi się nowe urządzenie o określonych właściwościach.

Tak więc pakiet broadcast w BLE będzie na przykład wyliczał zestaw usług dostarczanych przez urządzenie nadające. Aplikacja byłaby wtedy w stanie zarejestrować zainteresowanie określonymi usługami i zostać automatycznie uruchomiona, gdy urządzenie z tymi usługami wchodzi w zasięg.

Z tego co rozumiem to nie tak działa Android BLE API? Więc jak Mogę dostać coś podobnego?

Najprostszy możliwy przykład :

Mam czujnik BLE, który rejestruje temperaturę otoczenia w czasie. Gdy mój telefon z Androidem jest wystarczająco blisko, chcę połączyć się i pobrać wszystkie dane, wysyłając je do jakiegoś rozwiązania do przechowywania w chmurze. Ta aplikacja nie będzie potrzebował żadnego GUI(przynajmniej nie po zakończeniu konfiguracji). Ale jak powinno działać w tle bez opróżniania baterii, ale nadal daje mi dość dużą szansę na szybkie podłączenie urządzenia, gdy jest w zasięgu?

Pytanie :

Czy muszę ustawić timer i budzić aplikację raz na jakiś czas, a następnie ręcznie rozpocząć skanowanie? Jakie interwały powinienem wybrać. Jak długo skaner może działać bez negatywnego wpływu na akumulator?

Możliwe rozwiązanie :

To jest to, co wymyśliłem więc daleko.

  • aktywność konfiguracyjna do ustawiania interwałów i urządzeń do skanowania
  • W tym celu należy uruchomić program WakefulBroadcastReceiver, który jest podobny do przykładu Schedulera
  • gdy odbiornik otrzyma Zdarzenie onReceive uruchamiam usługę BLE scan (którą napisałem) jako usługę budzącą.
  • usługa skanowania rozpoczyna skanowanie (z zarejestrowanym wywołaniem zwrotnym).
  • serwis może otrzymać raporty adv, że może działać na
  • po pewnym czasie usługa zatrzyma skaner i zakończy usługę czuwania.

To działa, ale nie jestem pewien, czy to najlepszy sposób. Nie wiem też, jak małe interwały mogę mieć i nadal unikać niszczenia żywotności baterii. Chciałbym rozpocząć skanowanie co dwie minuty, skanowanie przez 10-20 sekund. Ale obawiam się, że to byłoby raczej często, aby obudzić urządzenie?

Author: Vegar Westerlund, 2013-11-11

1 answers

Ta funkcjonalność została przeniesiona do open source Android Beacon Library, która będzie:

  • Obudź / uruchom aplikację, gdy wykryte zostaną ibeacony pasujące do pożądanego wzorca

  • Wykonaj skanowanie sygnałów nawigacyjnych w tle, nawet jeśli użytkownik nie uruchomił jeszcze aplikacji

  • Zmniejsz szybkość skanowania automatycznie w tle do 30 sekund co pięć minut, aby zaoszczędzić baterię. (Czas konfigurowalny.)

Kod przykłady są pokazane tutaj

Jeśli Twoje urządzenie BLE nie jest beaconem, nadal możesz użyć tej biblioteki, aby to osiągnąć, wysyłając swój czujnik również jako beacon, a następnie po wykryciu podłącz się do głównej usługi.

 19
Author: davidgyoung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-20 05:21:34