2016-02-25 21 views
5

Chcę utrzymywać stałe połączenie BLE z moim urządzeniem peryferyjnym w trybie centralnym w mojej aplikacji i jej widżecie. Czy to możliwe technicznie?iOS CoreBluetooth: aktywne połączenie z tym samym urządzeniem docelowym jednocześnie w aplikacji i widżecie?

Powód jest następujący: po nawiązaniu połączenia w aplikacji, wysyłamy go do tła, a następnie otworzyć widżet dziś - widget powinien nadal działać z podłączonym urządzeniem peryferyjnym. I na odwrót: jeśli ukrywamy dzisiejszy widget, uruchom aplikację - aplikacja powinna nadal korzystać z istniejącego połączenia.

Odpowiedz

2

Tak, możesz kontynuować przetwarzanie zdarzeń BLE w tle, jeśli włączysz funkcję Bluetooth w tle. Po prostu wybierz swój główny plik projektu, następnie wybierz cel, a na karcie Możliwości włącz Tryby tła i włącz "Korzysta z akcesoriów Bluetooth LE".

W głównej aplikacji masz szansę przetworzyć dowolne zdarzenia BLE, nawet gdy aplikacja jest w tle.

Należy pamiętać, że zdarzenia BLE inicjują akcję, dlatego należy umieścić kod, który ma zostać wykonany w tle, w ramach metody delegowania, takiej jak didUpdateValueForCharacteristic.

Twój kod zostanie wykonany w dowolnej kolejce określonej podczas inicjowania CBCentralManager.

Widżet i aplikacja nie mogą współużytkować połączenia Ble. Możesz komunikować się między aplikacją a widżetem za pomocą metod sugerowanych przez Apple (NSUserDefault lub obserwowanie wartości klucza), lub możesz utworzyć kolejne połączenie BLE z widgetu i komunikować się za jego pośrednictwem.

+0

Marcus, dzięki za odpowiedź. Dobre podejście, ale moje pytanie jest trochę inne: czy możemy użyć połączenia BLE, które zostało ustanowione w aplikacji, w dzisiejszym widżecie? I wzajemnie. Np .: uruchamiamy aplikację, łączymy BLE, ukrywamy aplikację, uruchamiamy widget i kontynuujemy połączenie. – brigadir

+1

Proszę zawęzić odpowiedź, ponieważ nie o to pytasz. Nie, widżet i aplikacja nie mogą współdzielić połączenia. Możesz komunikować się między aplikacją a widżetem za pomocą metod sugerowanych przez Apple ('NSUserDefaults' lub obserwowanie wartości klucza), lub możesz utworzyć inne połączenie BLE z widgetu i komunikować się za jego pośrednictwem. –

+0

Marcus, dziękuję za wyjaśnienia i pomysł wykorzystania BLE w tle. Spróbuję tego ... – brigadir

0

Tak, jest to możliwe. Spójrz na retrieveConnectedPeripheralsWithServices: na CBCentralManager.

Zasadniczo, ta metoda polega na zebraniu wszystkich urządzeń peryferyjnych podłączonych do całego urządzenia z systemem iOS. Użyj tego podczas uruchamiania drugiej aplikacji na urządzeniu z iOS.

Gdy aplikacja działa w tle, połączenia BLE pozostają żywe, więc możesz ukryć aplikację 1, uruchomić aplikację 2, użyj tej metody do zidentyfikowania urządzenia peryferyjnego, które Cię interesuje i użyj go niezależnie od pierwszej aplikacji .

+0

Tak więc po 'retrieveConnectedPeripheralsWithServices' w drugiej aplikacji powinienem połączyć się z pobranymi urządzeniami peryferyjnymi, o czym wspomniałem w odnośniku. W takim przypadku istniejące połączenie w pierwszej aplikacji pozostanie przy życiu? Jeśli tak, w jaki sposób transfer danych odbywa się z dwoma równoczesnymi połączeniami? – brigadir

+0

Tak, istniejące połączenie pozostaje żywe. Nie jestem pewien co do wydajności. –